我正在尝试使用unittest模块测试某个函数是否不会抛出任何异常。 这可能吗?我只知道assertRaises方法,但是这个只测试抛出异常,而None参数不适用于Exception类型参数......
有什么想法吗?
答案 0 :(得分:6)
所以只需调用该函数,如果它引发异常,它将被报告为ERROR而不是失败,这意味着您的unittest转轮将停止(无法继续),如果您想将其报告为失败,您可以这样做:
try:
somefunction()
except:
self.fail("....")
答案 1 :(得分:2)
如果发生异常,测试将被标记为失败,所以我不明白为什么你需要实际断言。如果你真的想,你可以随便自己做:
try:
foo()
except:
raise AssertionError('should not raise exception')
答案 2 :(得分: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进行mixin。无论哪种方式都可行
和用例
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)
请原谅我的坏英语。