python - 为什么 python unittest assertRaises 方法不注册抛出的异常?
问题描述
我有一个与这篇文章类似的问题,但是该解决方案对我没有帮助,因为我只将一个参数传递给函数。
我有以下代码:
def outer():
def tuple_unpacker( mytuple ):
try:
a,b,c = mytuple
return a+b+c
except ValueError:
print('pass tuple with exactly 3 elements')
except TypeError:
print('pass only integers in tuple')
return tuple_unpacker
我使用 python unittest 模块进行测试。但是,即使引发了我的异常,断言也会失败。
class TestInner(unittest.TestCase):
def test_tuple_unpacker(self):
func = outer()
self.assertRaises(TypeError, func, (1,'a',1))
self.assertRaises(ValueError, func, (1,1,1,1))
当我运行它时,回溯是:
pass only integers in tuple
F
======================================================================
FAIL: test_tuple_unpacker (__main__.TestInner)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/malte/TDDE23_git/lab5/test_test.py", line 21, in test_tuple_unpacker
self.assertRaises(TypeError, func, (1,'a',1))
AssertionError: TypeError not raised by tuple_unpacker
----------------------------------------------------------------------
Ran 1 test in 0.000s
如您所见,它打印出来了,pass only integers in tuple
所以抛出了异常。
如果我切换位置,则问题是相同的,因此首先测试 ValueError 并失败。
奇怪的是,如果我将断言更改为:
class TestInner(unittest.TestCase):
def test_tuple_unpacker(self):
func = outer()
self.assertRaises(TypeError, func((1,'a',1)))
self.assertRaises(ValueError, func((1,1,1,1)))
它适用于 TypeError,但不适用于 ValueError。
这是回溯:
pass only integers in tuple
pass tuple with exactly 3 elements
E
======================================================================
ERROR: test_tuple_unpacker (__main__.TestInner)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/malte/TDDE23_git/lab5/test_test.py", line 22, in test_tuple_unpacker
self.assertRaises(ValueError, func((1,1,1,1)))
File "/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/unittest/case.py", line 731, in assertRaises
return context.handle('assertRaises', args, kwargs)
File "/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/unittest/case.py", line 201, in handle
callable_obj(*args, **kwargs)
TypeError: 'NoneType' object is not callable
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
感谢大家的指导。
解决方案
tuple_unpacker
打印然后抑制TypeError
和ValueError
异常。您的测试会检查这些异常,但由于未重新引发异常,因此测试失败。函数或测试有错误,需要更改。
推荐阅读
- ios - 所有 iOS .p12 证书都需要密码吗?
- list - 通过 Groovy 发出 HTTP 请求后,我有地图列表,我需要为每个元素添加一个新列表
- postgresql - 循环多个选择语句
- r - 根据相应的列 r 替换列值
- javascript - 将回调作为参数发送到 QJSValue::callAsConstructor()
- javascript - 从谷壳中分离小麦 - CodeWars 挑战
- javascript - 如何更正 AppMaker 发布到 Google 日历的问题
- scala - 需要对 Spark scala 中的 for 循环使用有所了解
- python - 连接字符串和文件路径在 pandas 中添加了额外的反斜杠
- mysql - 从 jsp/servlet 将日期添加到 mysql 数据库时出错