如何测试 Python 函数是否引发异常?

新手上路,请多包涵

如何编写一个只有在函数没有抛出预期异常时才会失败的单元测试?

原文由 Daryl Spitzer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

使用 unittest 模块中的 — TestCase.assertRaises (或 TestCase.failUnlessRaises ),例如:

 import mymod

class MyTestCase(unittest.TestCase):
    def test1(self):
        self.assertRaises(SomeCoolException, mymod.myfunc)

原文由 Moe 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 Python 2.7 开始,您可以使用上下文管理器来获取抛出的实际异常对象:

 import unittest

def broken_function():
    raise Exception('This is broken')

class MyTestCase(unittest.TestCase):
    def test(self):
        with self.assertRaises(Exception) as context:
            broken_function()

        self.assertTrue('This is broken' in context.exception)

if __name__ == '__main__':
    unittest.main()

http://docs.python.org/dev/library/unittest.html#unittest.TestCase.assertRaises


Python 3.5 中,您必须将 context.exception 包装在 str 中,否则您将得到 TypeError

 self.assertTrue('This is broken' in str(context.exception))

原文由 Art 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题