Модульное тестирование в Django: как инициализировать базу данных

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

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

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

1 ответ

Решение

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

Согласно слайдам Карла Майера "Тестирование и Джанго", светильники:

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

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

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

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

Также см:

Другие вопросы по тегам