2013-08-05 3 views
2

Я пытаюсь выполнить тестирование с Django. Моя проблема в том, что перед запуском тестов мне нужно добавить некоторые вещи в базу данных, например, несколько пользователей, отделов и их разрешения. Я попытался сделать это с помощью светильников, но я действительно считаю весь процесс очень неинтуитивным (также я узнал, что когда я удалял и повторно синхронизовал свою базу данных, мои пользователи были разбиты, потому что разрешения ссылаются только на идентификатор)!Модульное тестирование в Django: как инициализировать базу данных

Я искал другие решения для этой инициализации базы данных перед тестированием, но мне удалось найти только очень простые случаи, в которых инициализация выполняется в методе setUp класса TestCase. Я действительно не считаю, что такие методы могут использоваться, когда у вас есть приложение с разными пользователями и разрешениями, которые все должны быть протестированы.

Не могли бы вы рассказать мне, как вы заполняете свою базу данных, прежде чем начинать тесты для большого приложения? Существуют ли какие-либо лучшие методы, кроме приборов и класса setUp?

ответ

6

Модельные заводы (и инструменты, такие как factory_boy или model_mommy) - лучшая альтернатива.

Согласно Карл Майер slides на «Тестирование и Джанго», светильники:

  • Трудно поддерживать и обновлять.
  • Увеличьте тестовую взаимозависимость.
  • Медленная загрузка.

Лучше использовать фабрики моделей, почему?

  • Тестовые данные локальные для тестового кода (явные).
  • Прост в обслуживании.
  • Не создавайте никаких данных, которые вам не нужны для этого теста.
  • Отлично подходит для больших/сложных наборов тестовых данных (вспомогательные функции).

Лично я использовал factory_boy для тестирования почти в каждом проекте django. Стоит попробовать, взгляните.

Кроме того, см:

+0

Другим примером инструмента является Джанго Dynamic Крепеж (https://github.com/paulocheque/django- динамическое приспособление), которое является менее подробным и имеет другие хорошие возможности. –

+0

@PauloCheque спасибо за совместное использование, я лично предпочитаю 'factory_boy', потому что он обычно более явный. – alecxe