Выбор ответа Senior Тестирование обновлено
Изоляция данных в интеграционных тестах
Вопрос
Интеграционные тесты делят одну PostgreSQL в контейнере и иногда падают, если запускать их вместе. Что лучше всего решает проблему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чистить базу между тестами (Respawn) или откатывать транзакцию. Нестабильность из-за общих данных лечится изоляцией: каждый тест начинает с известного состояния.
Варианты ответа
- Добавить
Thread.Sleepмежду тестами, чтобы база успела освободиться - Запускать тесты в случайном порядке до тех пор, пока не пройдут
- Чистить базу между тестами (Respawn) или откатывать транзакциюправильный ответ
- Заменить PostgreSQL на InMemory-провайдер, он изолирует тесты
Разбор
Нестабильность из-за общих данных лечится изоляцией: каждый тест начинает с известного состояния. Respawn быстро удаляет данные, не трогая схему, а откат транзакции после теста ещё быстрее, если код не управляет транзакциями сам. Параллельно работающие коллекции xUnit должны получать разные базы или схемы. Паузы и перезапуски прячут проблему, а InMemory перестаёт проверять настоящий SQL.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.