我在项目中创建了一个新的测试。对于这个测试,我使用了与测试类相同的内部配置类中的
这怎么可能呢?我曾经认为不可能从外部使用测试类内部的配置。
现在这个测试无法运行:
@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: 在类路径资源[de/hlservices/timetracking/api/business/event/EventServiceTest$Config.class]中定义的名称为“passwordEncoder”的无效bean定义:无法注册bean定义
谢谢您的帮助 :)
"Original Answer"翻译成"最初的回答"