Ответ 1
Да, вы можете подготовить свои тестовые данные напрямую с помощью django ORM. Но есть преимущества использования фабрик и factory_boy
в частности, вот некоторые из них, которые я помню и использую:
-
ваши модельные заводы определяются красивым, чистым и читаемым образом:
class CasesFactory(factory.Factory): FACTORY_FOR = models.Case number = factory.Sequence(lambda n: '1021-{0}'.format(n)) create_date = datetime.datetime.now()
-
Еще одно преимущество этого подхода на основе классов - это возможность создавать SubFactories
-
также вы можете легко определить фабрики для разных отношений:
ForeignKey
, reverseForeignKey
,ManyToMany
(документация) - аккуратный
DjangoModelFactory
класс -
Sequence
(как вы уже упоминали) помогает сделать данные более "динамическими". Представьте себе, как обращаться с ним самостоятельно. -
mute_signals
decorator - иногда во время тестирования вы не хотите, чтобы сигнал отправлялся
В принципе, factory_boy
существует, чтобы избежать написания "вспомогательных" функций для генерации тестовых данных. Вместо этого он представляет удобный и простой в использовании интерфейс.
Спросите себя: зачем изобретать колесо, есть ли инструмент специально для этой работы?
Также смотрите:
- Тестирование и Django (презентация Карла Майера)