如何测试Python函数抛出异常?

2024-04-19 17:40:44 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

由于Python2.7,您可以使用上下文管理器获取抛出的实际异常对象的ID:

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))

使用unittest模块中的^{}(或TestCase.failUnlessRaises),例如:

import mymod

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

我之前的答案中的代码可以简化为:

def test_afunction_throws_exception(self):
    self.assertRaises(ExpectedException, afunction)

如果函数接受参数,只需将它们传递到assertRaises中,如下所示:

def test_afunction_throws_exception(self):
    self.assertRaises(ExpectedException, afunction, arg1, arg2)

相关问题 更多 >