2017-01-11 8 views
1

В настоящее время я решаю, какие тестовые пакеты использовать с моим проектом django, в частности, как заполнять данные до запуска тестов. Я посмотрел на:Почему я не могу создать собственную тестовую базу данных для моего проекта django?

  1. Светильники: Многие люди, кажется, против этого, так как изменения в формате JSON может быть трудным и трудно поддерживать.

  2. Заводчик: у моего проекта много иерархии, поэтому я чувствую, что создание объекта из модели, которая действительно низка в иерархии, очень медленная.

Идея, которую я имею в виду, состоит в том, чтобы просто создать базу данных, в которой я всегда буду тестировать тесты. Так как я знаю, какие данные в нем, разве он не будет работать аналогично приборам без хлопот JSON? Поскольку я не видел эту идею в своих исследованиях, я предполагаю, что это плохая идея. Почему же это плохая идея?

+0

Что вы пробовали? Возможно, я ошибаюсь, но django по умолчанию использует Sqlite, а переход на MySql или Postgres так же просто, как изменение 'settings.py'. –

+0

@GregSchmit: он спрашивает о различных способах получения тестовых данных в базе данных для модульного тестирования. – RemcoGerlich

ответ

1

Вы фактически протестировали с заводским мальчиком? С базами данных sqlite в памяти это очень быстро, по моему опыту, и супер удобно с иерархиями.

Ваша идея базы данных примерно такая же, как и приспособления - вы можете использовать базу данных для создания светильников JSON, выполнив команду управления dumpdata и сохраните свои тестовые данные в базе данных, а не в файлах JSON.

Некоторые причины предпочитать заводскую мальчика по тестовой базе данных:

  • Данные, полученные прямо в тесте, так что сразу видно, что происходит и какие поля являются релевантными для теста.

  • Данные поставляются с тестовым кодом, без дополнительных файлов или с базами данных для управления.

  • Фабрика мальчик очень хорошо с иерархией («Я хочу, чтобы экземпляр этого экземпляра со всеми полями значений по умолчанию, за исключением этого одного поля шесть ступеней вверх в иерархии» - instance = InstanceFactory.build(series__study__patient__archive__project__algorithm_type='foo'))

  • Иногда объект не обязательно должен быть сохранен в базе данных, чтобы проверить его методы, в этом случае заводский мальчик .build() работает очень быстро.

  • Вместо того, чтобы выбирать интересные временные рамки для текущего теста, у вас возникнет соблазн просто повторно использовать материал, который у вас уже есть в базе данных, а не найти ошибки.

  • Возможно, разные значения, которые необходимо проверить, не могут существовать в базе данных одновременно из-за ограничений уникальности.

Есть, вероятно, больше, но мне нужно спать.