Отражение Испускает, и Деревья выражений приходят на ум...
не пропускают CLR Jeffrey Richter через C#, и Jon Skeet
Посмотрите здесь для некоторых ресурсов:
http://www.codeproject.com/KB/trace/releasemodebreakpoint.aspx
http://www.codeproject.com/KB/dotnet/Creating_Dynamic_Types.aspx
Вот как я это делаю (извлечено из моего django-multiforloop ):
from django.test import TestCase
from django.template import Context, Template
class TagTests(TestCase):
def tag_test(self, template, context, output):
t = Template('{% load multifor %}'+template)
c = Context(context)
self.assertEqual(t.render(c), output)
def test_for_tag_multi(self):
template = "{% for x in x_list; y in y_list %}{{ x }}:{{ y }}/{% endfor %}"
context = {"x_list": ('one', 1, 'carrot'), "y_list": ('two', 2, 'orange')}
output = u"one:two/1:2/carrot:orange/"
self.tag_test(template, context, output)
Это довольно похоже на то, как тесты выложены в собственном наборе тестов Джанго , но не полагаясь на несколько сложную испытательную машину django.
Самый простой способ проверить шаблонный фильтр - это проверить его как обычную функцию.
@ register.filter decorator не вредит основной функции, вы можете импортировать фильтр и использовать его, как если бы он не был оформлен. Этот подход полезен для тестирования логики фильтра.
Если вы хотите написать больше тестов в стиле интеграции, вам следует создать экземпляр шаблона django и проверить правильность вывода (как показано в ответе Габриэля).