如何使用 python 库单元测试断言异常

How to assert for exceptions with python library unittest

我有一个虚拟函数来尝试异常:

def fun(n):
    try:
        if n <1:
            raise ValueError
        return 1
        except:
            pass

在我的单元测试中我使用:

import  unittest
class TestFibonnacci(unittest.TestCase):
    def test_values(self):
        self.assertEqual(fun(1),1)
        self.assertRaises(ValueError, fun(-1))

但是我无法得到我实际得到的答案:

出现异常 E.... 错误:test_values (main.TestFibonnacci)

回溯(最近调用最后): 这里的回溯

类型错误:'NoneType'对象不可调用

运行 0.001 秒内进行 1 次测试

我做错了什么?

您正在立即调用 fun(-1),而不是让 self.assertRaises 调用它,以便它 可以 捕获异常。

您必须分别传递函数及其参数。

self.assertRaises(ValueError, fun, -1)

或者,您可以使用 assertRaises 作为上下文管理器。

with self.assertRaises(ValueError):
    fun(-1)

with语句捕获fun抛出的异常,提供给assertRaises返回值的__exit__方法。