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