Очистка данных в тестах с живой БД

Всегда считал, что лучший способ очистки данных между интеграционными тестами с БД — запуск тестов в транзакции и откат этой транзакции в конце теста. Такой подход избавляет от лишней суеты с DELETE/TRUNCATE, и это удобно.

Но Влад Хориков в своей книге «Принципы юнит-тестирования» пишет, что это плохая идея: тестовая транзакция проникает в рабочий код и может привести к нарушениям его поведения. В итоге тест создает окружение, которое отличается от рабочего.

Вместо этого он предлагает явно очищать данные перед каждым тестом. При этом данные, созданные через дата-миграции, должны помечаться специальным флагом — логика очистки не должна их трогать. Так рабочее и тестовое окружения не смешиваются. Это делает поведение предсказуемым и не ломает архитектуру.

Очистка данных в тестах с живой БД | Сетка — социальная сеть от hh.ru Очистка данных в тестах с живой БД | Сетка — социальная сеть от hh.ru