断言在类实例中引发时不起作用

时间:2016-07-16 18:28:54

标签: python unit-testing tdd assert

assert在类的实例中调用时不会引发异常:

class TestCaseTest(TestCase):
    ...
    def testFailedResutFormatted(self):
        ...
        assert False    # This doesn't work at all

TestCaseTest("testFailedResutFormatted").run()
assert False    # But this works just fine

可在此处查看完整代码:http://pastebin.com/Hc9CTTxH

我显然做错了,因为这些都是本书的例子,它们应该有效。我无法弄清楚是什么问题。

1 个答案:

答案 0 :(得分:1)

assert False正常 ,但AssertionError方法会抓住TestCase.run(),以便稍后收集。

您没有传入TestResult实例,因此在Python 3中,TestCase.run()函数会为您返回 new 结果对象:

>>> from unittest import TestCase
>>> class TestCaseTest(TestCase):
...     def testFailedResutFormatted(self):
...         assert False
...
>>> tc = TestCaseTest("testFailedResutFormatted")
>>> tc.run()
<unittest.result.TestResult run=1 errors=0 failures=1>

在那里你看到记录了一个失败。

TestResult个实例传递给TestCase.run()方法,然后使用它; result.failures属性显示已触发的断言并被记录:

>>> from unittest import TestResult
>>> result = TestResult()
>>> tc.run(result)
>>> result
<unittest.result.TestResult run=1 errors=0 failures=1>
>>> result.failures
[(<__main__.TestCaseTest testMethod=testFailedResutFormatted>, 'Traceback (most recent call last):\n  File "<stdin>", line 3, in testFailedResutFormatted\nAssertionError\n')]
>>> print result.failures[0][1]
Traceback (most recent call last):
  File "<stdin>", line 3, in testFailedResutFormatted
AssertionError