Что у меня есть: я разрабатываю микросервис, используя Spring Boot с Web и MongoDB в качестве хранилища. Для интеграционных тестов CI я использую тестовые контейнеры. У меня есть два теста интеграции с аннотациями SpringBootTest, которые используют класс TestConfig. Класс TestConfig обеспечивает настройку тестового контейнера MongoDB с фиксированными открытыми портами.
Моя проблема: когда я запускаю свои тесты по одному, тогда они проходят успешно. Но когда я запускаю свои тесты одновременно, они не проходят.
MongoContainerConfig.kt
@TestConfiguration
class MongoContainerConfig {
var mongoContainer: GenericContainer<Nothing>
constructor() {
mongoContainer = FixedHostPortGenericContainer<Nothing>("mongo")
.withFixedExposedPort(27018,27017)
mongoContainer.start()
}
@PreDestroy
fun close() {
mongoContainer.stop()
}
}
Первый тест
@SpringBootTest(
classes = arrayOf(MongoContainerConfig::class, AssertUtilsConfig::class),
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
class CardControllerTest {
@Test
fun test() {}
}
Второй тест
@SpringBootTest(classes = arrayOf(MongoContainerConfig::class, AssertUtilsConfig::class))
class PositiveTest {
@Test
fun test() {}
}
Ошибка msg
Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132)
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoContainerConfig': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.lang.card.engcard.config.MongoContainerConfig$$EnhancerBySpringCGLIB$$e58ffeee]: Constructor threw exception; nested exception is org.testcontainers.containers.ContainerLaunchException: Container startup failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1320)
a
Этот проект вы можете увидеть на github с CI https://github.com/GSkoba/eng-card/runs/576320155?check_suite_focus=true
Это очень забавно, потому что тесты работают, если переписать их в java