如何使用Python unittest assertRaises来测试该函数不会抛出任何异常?

时间:2012-01-05 18:29:40

标签: python unit-testing assertions

我正在尝试使用unittest模块测试某个函数是否不会抛出任何异常。 这可能吗?我只知道assertRaises方法,但是这个只测试抛出异常,而None参数不适用于Exception类型参数......

有什么想法吗?

3 个答案:

答案 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)
请原谅我的坏英语。