Көптеген тест сыныптары үшін тоқтамай, ортақ TestContainer-ді қалай ұйымдастыруға болады?
AI-дан жауап
sobes.tech AI
Чтобы использовать один общий TestContainer для нескольких тестовых классов без его остановки между ними, можно применить паттерн Singleton или использовать аннотации JUnit 5 для управления жизненным циклом контейнера.
Например, создайте класс с контейнером как статическим полем и инициализируйте его один раз:
public class SharedContainer {
public static final GenericContainer<?> container;
static {
container = new GenericContainer<>("postgres:13")
.withExposedPorts(5432);
container.start();
}
}
В тестовых классах используйте этот контейнер, не останавливая его:
public class SomeTest {
@BeforeAll
static void setup() {
// Используем SharedContainer.container
String url = "jdbc:postgresql://" + SharedContainer.container.getHost() + ":" + SharedContainer.container.getFirstMappedPort() + "/test";
// Инициализация подключения и т.д.
}
}
Также можно использовать JUnit 5 Extension с аннотацией @TestInstance(Lifecycle.PER_CLASS) и управлять контейнером в методах с аннотациями @BeforeAll и @AfterAll, чтобы контейнер запускался один раз на весь набор тестов.
Если используется Spring Boot, можно создать bean с контейнером и указать scope singleton, чтобы контейнер жил на время всего контекста тестов.