有没有将自定义/调试消息添加到python/django unittest.TestCase的失败测试方法细节的方法?

tam*_*are 6 python django django-testing

我正在使用unittest.TestCase为我的django app编写测试用例(这与python中的unittest.TestCase基本相同).每当测试方法失败时,我会以下面的格式得到它的解释.有没有办法可以将自定义/调试消息添加到失败的测试方法的输出中?

======================================================================
FAIL: test_bad_votes (polls.tests.views.PollsViewsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/colinh/Development/tutorials/guide-to-testing-in-django/polls/tests/views.py", line 66, in test_bad_votes
    self.assertEqual(resp.context['form']['choice'].errors, [u'This field is required.'])
AssertionError: [] != [u'This field is required.']
Run Code Online (Sandbox Code Playgroud)

Jam*_*s R 8

一般来说,你想从django的unittest类TestCase继承,你可以从django.test导入它.也就是说,您可以将msg参数传递给您正在尝试评估的任何内容,其中包含失败消息.

以下是Humanize的一个例子:

class HumanizeTests(TestCase):

    def humanize_tester(self, test_list, result_list, method):
        # Using max below ensures we go through both lists
        # However, if the lists are not equal length, this raises an exception
        for test_content, result in zip(test_list, result_list):
            t = Template('{%% load humanize %%}{{ test_content|%s }}' % method)
            rendered = t.render(Context(locals())).strip()
            self.assertEqual(rendered, escape(result),
                         msg="%s test failed, produced '%s', should've produced '%s'" %     (method, rendered, result))
Run Code Online (Sandbox Code Playgroud)

显然,你的不需要像上面这样,但你可以看到msg参数在行动.

  • 如果检查`assertEqual`函数的定义,可以看到它接受msg参数`def assertEqual(self,first,second,msg = None): (3认同)