Как организовать общий TestContainer для нескольких тестовых классов без остановки между ними?

Чтобы использовать один общий TestContainer для нескольких тестовых классов без его остановки между ними, можно применить паттерн Singleton или использовать аннотации JUnit 5 для управления жизненным циклом контейнера.

Короткий ответ

Что ответить на собеседовании

Чтобы использовать один общий TestContainer для нескольких тестовых классов без его остановки между ними, можно применить паттерн Singleton или использовать аннотации JUnit 5 для управления жизненным циклом контейнера.

Подробный разбор

Ответ с пояснениями

Чтобы использовать один общий 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, чтобы контейнер жил на время всего контекста тестов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее