Подтвердить что ты не робот

Организация модульных тестов Django

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

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

4b9b3361

Ответ 1

Из версии 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, и выполнять их.

Ответ 2

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

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

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

edit: Ничего себе, не заметил, что вы уже упоминали пакет tests.

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

[edit: Добавлена ​​заметка о версии Django 1.6]

Ответ 3

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

from foo_test import *
from bar_test import *

Ответ 4

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

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

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

$ ./manage.py test --pattern="*_test.py"