如何使用 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__
方法。
我有一个虚拟函数来尝试异常:
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__
方法。