Организация юнит-тестов Django - PullRequest
46 голосов
/ 02 марта 2011

Прямо сейчас у меня есть мои модульные тесты Django, живущие в mcif/tests.py. Я бы предпочел иметь что-то более похожее на mcif/tests/foo_test.py, mcif/tests/bar_test.py и т. Д., Но если я организую свои тесты таким образом, Django выскочит.

Есть ли способ сделать то, что я пытаюсь сделать, или мне нужно, чтобы все мои тесты были в одном файле?

Ответы [ 4 ]

115 голосов
/ 05 января 2014

В версии 1.6 Django изменен механизм обнаружения тестов.Вам больше не нужно импортировать все из tests/__init__.py, но теперь вы должны убедиться, что все ваши файлы, содержащие тесты, соответствуют шаблону test*.py.

Таким образом, вместо app/tests/models.py и app/tests/views.pyТеперь у вас должно быть app/tests/test_models.py и app/tests/test_views.py.

Вы также можете создать файл с именем app/tests/test.py и включить в него другие файлы.Дело в том, что бегун ищет файлы, соответствующие шаблону test*.py, и выполняет их.

17 голосов
/ 02 марта 2011

Примечание: это описывает поведение до Django 1.6. См. ответ Артура Солера для Django 1.6 и более поздних версий .

Сделать пакет: myapp/tests/

В пакете поместите столько разных модулей тестирования, сколько хотите. В __init__.py в tests импортируйте тесты из этих модулей. (Или какой-то вариант этой темы.)

edit: Вау, не заметил, что вы уже упомянули пакет tests.

Важным является получение всего доступного из пакета. Django получит тесты из пакета, поэтому они должны быть видны в __init__.py.

[править: Добавлено примечание о Django версии 1.6]

2 голосов
/ 06 августа 2015

Просто добавьте к Артур Солер отлично ответ ...

Вы также можете использовать опцию --pattern, чтобы указать, как ваши тестовые файлыпо имени.

Например, если ваши тестовые файлы имеют имена foo_test.py, bar_test.py и аналогичные, вы можете использовать:

$ ./manage.py test --pattern="*_test.py"
2 голосов
/ 23 марта 2011

В ваш __init__.py положите что-то вроде:

from foo_test import *
from bar_test import *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...