Я задавал себе тот же вопрос раньше. Я обнаружил, что тесты документов имеют ограниченную полезность для таких вещей, как представления, методы моделей и менеджеры, потому что
- Вы должны иметь возможность настроить и удалить набор тестовых данных для фактического использования для тестирования
- Представления должны принимать объект запроса. Откуда это происходит?
По этой причине я всегда использовал модульное тестирование Django , которое обрабатывает все это для вас. К сожалению, однако, вы не получаете некоторых преимуществ от doctests, и это делает TDD / BDD труднее сделать. Далее следует чистое предположение о том, как вы могли бы сделать эту работу:
Думаю, вы захотите извлечь документы из соответствующих модулей и функций и выполнить их в рамках модульного тестирования. Это позаботится о настройке / разборке тестовых данных. Если ваши тесты выполнялись из тестового метода чего-то, что является подклассом Django unittest.TestCase, они могли бы использовать эту тестовую БД. Вы также сможете передать объект фиктивного запроса в контекст выполнения doc-теста. Вот фрагмент Django , который предоставляет фиктивный объект запроса и info на нем. Допустим, вы хотели протестировать строки документов из всех представлений приложений. Вы можете сделать что-то подобное в tests.py:
from ??? import RequestFactory
from doctest import testmod, DocTestFailure
from django.test import TestCase
from myapp import views
class MyAppTest(TestCase):
fixtures = ['test_data.json']
def test_doctests(self):
try:
testmod(views, extraglobs={
'REQUEST': RequestFactory()
}, raise_on_error=True)
except DocTestFailure, e:
self.fail(e)
Это должно позволить вам сделать что-то вроде этого:
def index(request):
"""
returns the top 10 most clicked products
>>> response = index(REQUEST)
>>> [test response content here]
"""
products = Product.objects.all()[:10]
products = match_pictures_with_products( products, 10) .
return render_to_response('products/product_list.html', {'products': products})
Опять же, это просто не в моей голове, и совсем не проверено, но я думаю, что это единственный способ сделать то, что вы хотите, не помещая все свои тесты представлений в среду модульного тестирования.