Интеграционные тесты на Go: testcontainers и изоляция окружения
Интеграционные тесты проверяют то, что заглушки проверить не могут: реальные запросы к базе, поведение миграций, транзакции и блокировки, особенности драйвера. Проблема у них одна — окружение, и решают её двумя способами. Внешнее окружение (compose, поднятый заранее) быстрее, но требует ручной подготовки и легко расходится между машиной разработчика и конвейером. Testcontainers поднимает контейнер прямо из теста и убирает его через t.Cleanup — окружение описано в коде, воспроизводимо и не требует внешних действий; плата в том, что нужен доступный Docker и старт занимает секунды. Общие правила для обоих: интеграционные тесты отделяют build-тегом или флагом -short, чтобы обычный прогон оставался быстрым; изоляцию между тестами обеспечивают транзакцией с откатом или отдельной схемой на тест, а не очисткой таблиц; и никакого общего состояния, иначе параллельный прогон станет невозможен.