Джанго и тесты в документах - PullRequest
2 голосов
/ 29 сентября 2011

У меня небольшая проблема с моим набором тестов с Django.

Я работаю над пакетом Python, который может работать как в Django, так и в Plone (http://pypi.python.org/pypi/jquery.pyproxy). Все тесты написаны как doctests, либо в коде Python, либо в отдельных файлах документации (например, README.txt).

У меня могут быть все эти тесты в порядке, но Django просто не считает их:

[vincent ~/buildouts/tests/django_pyproxy]> bin/django test pyproxy
...
Creating test database for alias 'default'...

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

Но если у меня был какой-то провальный тест, он будет отображаться правильно:

[vincent ~/buildouts/tests/django_pyproxy]> bin/django test pyproxy
...
Failed example:
    1+1
Expected nothing
Got:
    2
**********************************************************************
1 items had failures:
   1 of  44 in README.rst
***Test Failed*** 1 failures.
Creating test database for alias 'default'...

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

Вот как мой тестовый набор объявлен прямо сейчас:

import os
import doctest
from unittest import TestSuite

from jquery.pyproxy import base, utils

OPTIONFLAGS = (doctest.ELLIPSIS |
           doctest.NORMALIZE_WHITESPACE)

__test__ = {
    'base': doctest.testmod(
        m=base,
        optionflags=OPTIONFLAGS),

    'utils': doctest.testmod(
        m=utils,
        optionflags=OPTIONFLAGS),

    'readme': doctest.testfile(
        "../../../README.rst",
        optionflags=OPTIONFLAGS),

    'django': doctest.testfile(
        "django.txt",
        optionflags=OPTIONFLAGS),

    }

Я предполагаю, что я делаю что-то не так, когда объявляю набор тестов, но я понятия не имею, что это такое.

Спасибо за вашу помощь, Винсент

1 Ответ

1 голос
/ 03 октября 2011

Я наконец-то решил проблему с помощью метода suite():

import os
import doctest
from django.utils import unittest

from jquery.pyproxy import base, utils

OPTIONFLAGS = (doctest.ELLIPSIS |
               doctest.NORMALIZE_WHITESPACE)

testmods = {'base': base,
            'utils': utils}
testfiles = {'readme': '../../../README.rst',
             'django': 'django.txt'}

def suite():
    return unittest.TestSuite(
        [doctest.DocTestSuite(mod, optionflags = OPTIONFLAGS)
         for mod in testmods.values()] + \
        [doctest.DocFileSuite(f, optionflags = OPTIONFLAGS)
         for f in testfiles.values()])

Очевидно, проблема при вызове doctest.testfile или doctest.testmod заключается в том, что тесты запускаются напрямую. Использование DocTestSuite / DocFileSuite создает список, а затем запускает тестовый прогон.

...