Выбор ответа Senior Тестирование обновлено

Изоляция данных в интеграционных тестах

Вопрос

Интеграционные тесты делят одну PostgreSQL в контейнере и иногда падают, если запускать их вместе. Что лучше всего решает проблему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чистить базу между тестами (Respawn) или откатывать транзакцию. Нестабильность из-за общих данных лечится изоляцией: каждый тест начинает с известного состояния.

Варианты ответа

  1. Добавить Thread.Sleep между тестами, чтобы база успела освободиться
  2. Запускать тесты в случайном порядке до тех пор, пока не пройдут
  3. Чистить базу между тестами (Respawn) или откатывать транзакциюправильный ответ
  4. Заменить PostgreSQL на InMemory-провайдер, он изолирует тесты

Разбор

Нестабильность из-за общих данных лечится изоляцией: каждый тест начинает с известного состояния. Respawn быстро удаляет данные, не трогая схему, а откат транзакции после теста ещё быстрее, если код не управляет транзакциями сам. Параллельно работающие коллекции xUnit должны получать разные базы или схемы. Паузы и перезапуски прячут проблему, а InMemory перестаёт проверять настоящий SQL.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме