gpt4 book ai didi

java - 测试使用其他测试的内部 ContextConfiguration

转载 作者:行者123 更新时间:2023-11-28 20:35:06 26 4
gpt4 key购买 nike

我在我的项目中创建了一个新测试。对于这个,我使用了 @ContextConfiguration 和一个内部配置类,与测试在同一个类中。但是现在我的其他测试都失败了,因为它们正在使用新测试的配置。

这怎么可能,我认为不可能从外部使用测试类内部的配置。

当我从新测试中删除内部配置时,所有其他测试再次正常工作。

@DataJpaTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ContextConfiguration(classes = EventServiceTest.Config.class)
class EventServiceTest {
@Configuration
@Import({WorkingTimeConfig.class,
PartnerConfig.class,
ProjectConfig.class,
UserConfig.class,
AccountGroupConfig.class,
LanguageConfig.class,
CountryConfig.class,
EventConfig.class,
LanguageConfig.class})
static class Config {
@SuppressWarnings("unused")
@MockBean(reset = MockReset.BEFORE)
private UserAttendanceBoard userAttendanceBoard;

@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

@Bean
public ImpersonateProperties impersonateProperties() {
return new ImpersonateProperties();
}
}
...
}

现在这个测试不工作了:

@Import(MailSenderAutoConfiguration.class)
@DataJpaTest
@Transactional
public class ServiceTimeEntryServiceTest {

private ServiceTimeService serviceTimeService;
private ServiceTimeEntryRepository repository;

@Autowired
public ServiceTimeEntryServiceTest(ServiceTimeService serviceTimeService, ServiceTimeEntryRepository repository) {
this.serviceTimeService = serviceTimeService;
this.repository = repository;
}

@Test
void getAllByAccountId() {...}

如果我尝试开始我的旧测试,则会抛出此错误:

org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'passwordEncoder' defined in class path resource [de/hlservices/timetracking/api/business/event/EventServiceTest$Config.class]: Cannot register bean definition

感谢您的帮助:)

最佳答案

正如 Maciej Kowalski 所指出的,这个问题可能与 @ComponentScan 注释有关。

如果您正在使用它,请考虑添加一个 excludeFilter 以确保您只得到您真正想要的。您可能希望排除由 @ComponentScan 注释找到的其他配置类:

@ComponentScan(excludeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,
value = Configuration.class)
})

顺便说一句:我真的推荐使用 IntelliJ IDEA 作为 IDE,因为它有很棒的 spring 支持。您可以通过单击代码左侧的绿色图标(第 9 行)来查找通过扫描找到的 bean/组件:

IntelliJ IDEA Spring Support

这使得调试扫描问题变得更加容易。

关于java - 测试使用其他测试的内部 ContextConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com