Django doctests в views.py

Документация 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

23
задан jamesc 13 December 2013 в 13:48
поделиться

4 ответа

Вы можете сделать это, добавив / отредактировав функцию 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
22
ответ дан 29 November 2019 в 01:22
поделиться

Вы можете попробовать написать свой собственный testrunner и посмотреть, можете ли вы включить другие файлы для проверки на наличие тестов документации.

http://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runner

1
ответ дан 29 November 2019 в 01:22
поделиться

Используйте nosetests с плагином для django (django-sane-testing или django-nose) и используйте флаг --with-doctest.

5
ответ дан 29 November 2019 в 01:22
поделиться

Родная система тестирования Django основана на пакете unittest. Поэтому она не настолько мощная, насколько может быть.

Я рекомендую вам использовать nose, который является обратно-совместимым unittest на стероидах. Используйте его вместе с Django test runner, который использует nose. Вы можете настроить nose различными способами, включая направление его на пользовательские места тестирования с помощью флага -m.

2
ответ дан 29 November 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: