Я испытываю непоследовательное поведение в тесте JUnit 5, связанном с регистрацией bean-компонентов. При локальном запуске теста все проходит, как и ожидалось, но при запуске теста в нашем конвейере Jenkins порядок загрузки кажется другим. @ConditionalOnMissingBean
не разрешается должным образом, и тест получает два определения для одного и того же компонента.
Регистрация компонента в самом тесте выглядит следующим образом:
private AnnotationConfigApplicationContext context;
@BeforeEach
public void setUpTest() {
this.context = new AnnotationConfigApplicationContext();
}
@AfterEach
public void tearDownTest() {
if (this.context != null) {
this.context.close();
}
}
@Test
public void testRegisterCustomPropertiesCorrectly() throws Exception {
register(CustomProperties.class, ServiceConfig.class);
...
}
private void register(Class<?>... components) {
this.context.register(components);
this.context.refresh();
}
CustomProperties
@Configuration
public static class CustomProperties {
@Bean
public ShutdownProperties shutdownProperties() {
...
}
@Bean
public ServiceProperties serviceProperties() {
...
}
@Bean
public TomcatCustomProperties tomcatCustomProperties() {
...
}
@Bean
public ThreadPoolProperties threadPoolProperties() {
...
}
}
ServiceConfig
@Configuration
@Import(ThreadPoolConfig.class)
public class ServiceConfig {
}
ThreadPoolConfig
@Component
@ConfigurationProperties(prefix = "service.thread-pool")
@ConditionalOnMissingBean(ThreadPoolProperties.class)
public class ThreadPoolProperties {
...
}
Есть ли что-нибудь, что я не видать или что я могу делать не так? Или есть поведение в способе AnnotationConfigApplicationContext
регистрации, обновления или закрытия, о котором я не знаю? Я не мог найти какую-либо точку, где неопределенность будет введена. Это происходит последовательно, так что должно быть даже так. Если это важно, моя локальная машина - Ma c, но машины Jenkins работают Linux. Тест также использует версию Spring 5.2.3.RELEASE
.