#spring #spring-boot #junit #junit5 #spring-test
#spring #spring-загрузка #junit #junit5 #spring-test
Вопрос:
У меня есть 6 классов JUnit в разных тестовых пакетах. Я хочу использовать application.properties
файл, который используется Spring framework для настройки подключения к базе данных.
Проблема в том, как создать соединение с базой данных при запуске первого теста JUnit и повторно использовать его для всех классов. В конце, чтобы правильно закрыть соединение.
Ответ №1:
Для этого вы можете использовать Testcontainers. Если вы хотите повторно использовать существующий контейнер базы данных (например, PostgreSQL или MySQL), обязательно используйте ручной подход к жизненному циклу контейнера и запустите контейнер один раз (например, внутри абстрактного тестового класса). Testcontainers вызывает эти одноэлементные контейнеры:
abstract class AbstractContainerBaseTest {
static final MySQLContainer MY_SQL_CONTAINER;
static {
MY_SQL_CONTAINER = new MySQLContainer();
MY_SQL_CONTAINER.start();
}
}
class FirstTest extends AbstractContainerBaseTest {
@Test
void someTestMethod() {
String url = MY_SQL_CONTAINER.getJdbcUrl();
// create a connection and run test as normal
}
}
Как только ваша JVM завершит работу, ваш контейнер будет удален.
Другим подходом может быть функция повторного использования Testcontainers:
static PostgreSQLContainer postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
.withDatabaseName("test")
.withUsername("duke")
.withPassword("s3cret")
.withReuse(true);
Если настройки вашей базы данных одинаковы для всех ваших тестов, и вы выбираете эту функцию, Testcontainers будут повторно использовать уже запущенный контейнер. Имейте в виду, что при таком подходе вы должны очистить контейнер для себя, поскольку они остаются в живых после завершения всех тестов.
Комментарии:
1. К сожалению, я использую сервер MSSQL для этой базы данных?
2. Это не проблема, в Testcontainers также есть модуль MSSQL .