【问题标题】:assert doesn't work when raised in class instance在类实例中提出时断言不起作用
【发布时间】:2016-07-16 18:28:54
【问题描述】:

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

我显然做错了什么,因为这些是书中的例子,它们应该有效。我就是想不通是怎么回事。

【问题讨论】:

    标签: python unit-testing tdd assert


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2018-12-12
      • 2015-01-19
      相关资源
      最近更新 更多