Вопрос проверяет понимание Testcontainers как инструмента для интеграционного тестирования с реальными зависимостями в изолированных Docker-контейнерах.
Testcontainers — это библиотека для интеграционного тестирования, которая автоматически запускает реальные сервисы (PostgreSQL, Redis, Kafka, RabbitMQ и другие) в Docker-контейнерах на время выполнения тестов. Вместо того чтобы мокать базу данных или брокер сообщений, вы получаете настоящее окружение, максимально приближенное к продакшену.
@Testcontainers
class UserRepositoryTest {
@Container
static PostgreSQLContainer<?> postgres =
new PostgreSQLContainer<>("postgres:16");
@Test
void savesAndFindsUser() {
var ds = new PGSimpleDataSource();
ds.setURL(postgres.getJdbcUrl());
ds.setUser(postgres.getUsername());
ds.setPassword(postgres.getPassword());
var repo = new UserRepository(ds);
repo.save(new User("alice"));
assertEquals("alice", repo.findByName("alice").name());
}
}
Testcontainers поддерживает Java, .NET, Python, Node.js, Go и другие языки. Часто применяется в CI/CD: тесты запускаются в пайплайне, где Docker доступен, и не требуют внешних сервисов.
Итог: Testcontainers стоит применять, когда важна достоверность интеграционных тестов и вы хотите тестировать код против реальных зависимостей без ручной настройки окружения.