Документация Django 1.4 относительно тестовых состояний:
Для данного приложения Django исполнитель тестов ищет doctests в двух местах:
models.py
файл. Можно определить уровень модуля doctests и/или doctest для отдельных моделей. Это - обычная практика для помещения прикладного уровня doctests в модуль docstring и образцовый уровень doctests в образцовых docstrings.Файл называют
tests.py
в каталоге приложения - т.е. каталог, который содержит models.py. Этот файл является рычагом для любого и всего doctests, Вы хотите записать, что не обязательно связаны с моделями.
Из любопытства я хотел бы знать, почему testrunner Django ограничен doctests в models.py
, но более практически я хотел бы знать, как можно было развернуть doctests testrunner для включения (например), views.py
и другие модули при выполнении manage.py test
.
Я был бы благодарен за любой вход.
Спасибо.
Brian
Вы можете сделать это, добавив / отредактировав функцию suite () в tests.py, которая определяет, какие тесты будет запускать средство запуска тестов django.
import unittest
import doctest
from project import views
def suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite(views))
return suite
Затем просто запустите ваши тесты как обычно, и вы увидите, что ваши тесты в views.py запущены.
$ python manage.py test project
Это описано более подробно в документации по тестированию django
Когда вы запускаете тесты, по умолчанию тестовая утилита находит все тестовые примеры (то есть подклассы unittest.TestCase) в models.py и tests.py автоматически создайте набор тестов из этих тестовых случаев и запустите этот набор.
Существует второй способ определить набор тестов для модуля: если вы определите функцию с именем suite () в models.py или tests.py, средство запуска тестов Django будет использовать эту функцию для создания набора тестов для этот модуль. Это соответствует предлагаемой организации для модульных тестов. См. Документацию Python для получения дополнительных сведений о том, как создать сложный набор тестов.
Однако имейте в виду, что создание собственного набора тестов означает, что средство запуска тестов django не будет автоматически запускать какие-либо тесты, которые есть в tests.py. Вам придется добавить их в свой пакет вручную, например
import unittest
import doctest
from project import views
class FooTestCase(unittest.TestCase):
def testFoo(self):
self.assertEquals('foo', 'bar')
def suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite(views))
suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FooTestCase))
return suite
Вы можете попробовать написать свой собственный testrunner
и посмотреть, можете ли вы включить другие файлы для проверки на наличие тестов документации.
http://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runner
Используйте nosetests с плагином для django (django-sane-testing или django-nose) и используйте флаг --with-doctest.
Родная система тестирования Django основана на пакете unittest
. Поэтому она не настолько мощная, насколько может быть.
Я рекомендую вам использовать nose, который является обратно-совместимым unittest
на стероидах. Используйте его вместе с Django test runner, который использует nose. Вы можете настроить nose различными способами, включая направление его на пользовательские места тестирования с помощью флага -m
.