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.