@summerwind
Web-программист

Можно ли отключать foreign keys в тестовой базе данных (не антипаттерн ли это)?

У меня в проекте есть тесты, которые тестируют отдельные классы и их взаимодействие с БД. Для этой цели я перед запуском каждого теста предоставляю тесту чистую тестовую базу.
Каждый класс использует только свой ограниченный набор моделей. В БД этим моделям соответствуют таблицы, но таблицы разных моделей, используемые в разных классах, могут быть связаны между собой с помощью внешних ключей (foreign keys).
Какая есть проблема: например, у меня есть класс, сохраняющий какую-то модель в БД, и я хочу протестировать этот метод сохранения. Я создаю экземпляр модели, пытаюсь в тесте его сохранить и осознаю, что это не будет работать, потому что у модели есть 4 внешних ключа, и мне приходится брать и вставлять в БД предварительно 4 строки в разные таблицы. У каждых из этих 4-х строк еще по 2 внешних ключа и т.д. Таким образом, получается, что для проверки сохранения одной модели мне приходится сохранять в БД целый граф объектов, некоторые из которых внутри данного теста никак не затрагиваются.
Конечно, есть такая вещь, как фикстуры, когда я могу хранить XML или JSON-файлики и перед каждым тестом заполнять БД заранее предопределенными данными. Но что, если просто отключать все foreign keys во время тестов и записывать в БД только те модели, которые в данный момент тестируются? Можно ли это рассматривать как вариант? И есть ли какие-то критичные минусы у этого решения, которые с первого взгляда не видны?
  • Вопрос задан
  • 248 просмотров
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Отключив FK, вы будете, фактически, тестировать не ту базу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы