advanced
Database tests, containers и transaction rollback
Выбирайте real database tests для query behavior, осознанно используйте containers или managed fixtures и reset state через transactions или isolated schemas.
Тесты БД проверяют SQL, миграции, constraints и ORM mapping на реальном движке — не in-memory заменителе с другим поведением. Testcontainers поднимают эфемерные Postgres/MySQL в CI; альтернатива — общие staging-схемы с аккуратной очисткой.
Оборачивайте тест в транзакцию с rollback после assert, или truncate таблиц в детерминированном порядке. Выбор между скоростью (in-memory, shared) и достоверностью (контейнер как в проде).
На интервью: когда мокать repository, а когда Testcontainers, и как избежать interference при параллели.
Типовые ошибки: SQLite вместо Postgres-специфики, утечки соединений, зависимость от auto-increment ID прошлых прогонов.
Компромисс — время и сложность CI против уверенности в запросах и миграциях.
Чеклист:
- В integration — движок с фичами как в проде.
- Надёжный сброс состояния на тест.
- Миграции в pipeline.