Ответ
Testcontainers — это Java-библиотека для запуска Docker-контейнеров во время выполнения тестов. Она позволяет создавать временные экземпляры баз данных, брокеров сообщений и других сервисов, обеспечивая изолированное и приближенное к production окружение для интеграционных тестов.
Ключевые преимущества:
- Автоматизация: Не требует ручного развертывания зависимостей.
- Изоляция: Каждый тестовый класс или метод получает чистый экземпляр сервиса.
- Совместимость: Интегрируется с JUnit 4/5, Spock и другими фреймворками.
- Широкий охват: Поддерживает множество образов (PostgreSQL, Redis, Kafka, LocalStack и др.).
- Самоочистка: Контейнеры автоматически останавливаются и удаляются после тестов.
Пример использования с JUnit 5 и PostgreSQL:
@Testcontainers
public class UserRepositoryTest {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15")
.withDatabaseName("testdb")
.withUsername("test")
.withPassword("test");
@Test
void shouldSaveAndRetrieveUser() {
// Получаем динамический JDBC URL контейнера
String jdbcUrl = postgres.getJdbcUrl();
// Инициализируем репозиторий с реальной БД и выполняем тесты
UserRepository repository = new UserRepository(jdbcUrl);
// ... тестовые утверждения
}
}
Когда использовать: Для интеграционных, компонентных и end-to-end тестов, где необходима реальная внешняя зависимость, а моки или embedded-решения недостаточны.