Вы не можете использовать аннотацию JUnit Jupiter @Container
, если хотите иметь многоразовые контейнеры. Эта аннотация гарантирует, что контейнер будет останавливаться после каждого теста .
Что вам нужно, так это подход одноэлементного контейнера и использовать, например, @BeforeAll
для запуска ваших контейнеров. Даже если у вас будет .start()
в нескольких тестах, Testcontainers не запустит новый контейнер, если вы включили повторное использование, используя как .withReuse(true)
в определении контейнера, так и следующий файл .testcontainers.properties
в вашем домашнем каталоге:
testcontainers.reuse.enable=true
Простой пример может выглядеть следующим образом:
@SpringBootTest
public class SomeIT {
public static GenericContainer postgreSQLContainer = new PostgreSQLContainer().
withReuse(true);
@BeforeAll
public static void beforeAll() {
postgreSQLContainer.start();
}
@Test
public void test() {
}
}
и другой интеграционный тест:
@SpringBootTest
public class SecondIT {
public static GenericContainer postgreSQLContainer = new PostgreSQLContainer().
withReuse(true);
@BeforeAll
public static void beforeAll() {
postgreSQLContainer.start();
}
@Test
public void secondTest() {
}
}
В настоящее время существует PR, который добавляет документацию об этом
Я собрал сообщение в блоге, в котором подробно объясняется , как повторно использовать контейнеры с Testcontainers .