如何使用Python unittest assertRaises测试函数是否未抛出异常?
我正在尝试测试某个函数是否没有抛出任何异常,使用的是unittest模块。这样做可以吗?我只知道assertRaises这个方法,但这个方法只是用来测试是否抛出了异常,而传入None作为异常类型的参数是行不通的……
有没有什么想法?
3 个回答
0
我在做单元测试的时候也遇到了同样的问题。mouad和Michael说得对,不过有一种更简洁的方法来处理异常的断言,保持方法的一致性。
class TestCase(unittest.TestCase):
def assertNoRaise(self, callableObj):
try:
callableObj()
except:
raise AssertionError('shouldn\'t raise an exception')
def assertAnyRaise(self, callableObj):
try:
callableObj()
except:
return
raise AssertionError('should raise an exception')
或者把上面的类和继承分开,然后用unittest.TestCase进行混合,这两种方式都可以。
还有一个使用案例
class my_test(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_assertion(self):
self.assertAnyRaise(lambda: 1+'a')
self.assertNoRaise(lambda: 1+1)
请原谅我的英语不好。
2
如果发生了异常,测试就会被标记为失败,所以我不明白为什么你还需要去做任何断言。如果你真的想要这样做,你可以自己手动去做:
try:
foo()
except:
raise AssertionError('should not raise exception')
6
所以只要调用这个函数,如果它出现了异常,就会被报告为错误,而不是失败。这意味着你的单元测试运行器会停止(无法继续进行)。如果你想把它报告为失败,可以这样做:
try:
somefunction()
except:
self.fail("....")