Проверяет понимание Testcontainers — библиотеки для запуска изолированных зависимостей в Docker-контейнерах во время интеграционного тестирования.
Testcontainers — это библиотека, которая упрощает интеграционное тестирование, позволяя запускать реальные сервисы (базы данных, брокеры сообщений, веб-серверы) в Docker-контейнерах прямо из тестового кода. Вместо того чтобы использовать заглушки или локально установленные сервисы, вы получаете изолированное и воспроизводимое окружение, которое автоматически очищается после завершения теста.
Библиотека использует Docker API для создания контейнера на лету. Вы описываете нужный образ, указываете порты и параметры, а Testcontainers управляет жизненным циклом контейнера: запускает перед тестом, ждёт готовности сервиса и останавливает после. Это особенно полезно для тестирования взаимодействия с базами данных, так как вы можете проверить реальные SQL-запросы и транзакции.
@Testcontainers
public class UserRepositoryTest {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15")
.withDatabaseName("testdb")
.withUsername("test")
.withPassword("test");
@Test
void shouldSaveUser() {
// используем postgres.getJdbcUrl() для подключения
// выполняем тест с реальной БД
}
}В этом примере контейнер PostgreSQL стартует автоматически, и тест может использовать его JDBC URL. После теста контейнер удаляется, не оставляя следов.
Testcontainers стоит применять, когда нужно тестировать реальное взаимодействие с инфраструктурными зависимостями, обеспечивая чистоту и воспроизводимость тестов. Это особенно ценно в CI/CD, где окружение может отличаться от локального.