Python - 在未引发异常时成功的测试

Ano*_*ous 15 python unit-testing exception-handling exception

我知道unittestPython模块.

我知道课堂的assertRaises()方法TestCase.

我想编写一个在引发异常时成功的测试.

有什么提示吗?

Han*_*Gay 23

def runTest(self):
    try:
        doStuff()
    except:
        self.fail("Encountered an unexpected exception.")
Run Code Online (Sandbox Code Playgroud)

更新:正如liw.fi所提到的,默认结果是成功,所以上面的例子是反模式.如果你想在失败之前做一些特别的事情,你应该只使用它.您还应该捕获可能的最具体的异常.

  • 这具有丢失原始堆栈跟踪的缺点,使得测试更难以在失败时进行调试. (4认同)
  • 谢谢 - "喝咖啡之前的回答"再次罢工. (2认同)

小智 14

测试运行器将捕获您未声明的所有异常.从而:

doStuff()
self.assert_(True)
Run Code Online (Sandbox Code Playgroud)

这应该工作正常.您可以省略self.assert_调用,因为它实际上没有做任何事情.我喜欢把它放在那里以证明我没有忘记一个断言.

  • 这样测试不会失败但会引发错误.在我看来,另一个答案中提到的try/except方法是一个更好的答案. (6认同)

kos*_*sii 5

我使用这种模式作为你问过的断言:

with self.assertRaises(Exception):
    try:
        doStuff()
    except:
        pass
    else:
        raise Exception
Run Code Online (Sandbox Code Playgroud)

当doStuff()引发异常时,它将完全失败.