assertRaises 不适用于 Futures
assertRaises not working with Futures
我更改了对 bar
的调用,该调用同步返回以返回 Future。当 bar
的方法实际执行时,它会引发一个 ValueError
。
单元测试实际上确保了这一点。
正在改变
self.assertRaises(ValueError, foo.bar("/my/invalid/path"))
至
self.assertRaises(ValueError, fut.result())
由于某种原因不再是有效断言。
整个新代码是:
fut = foo.bar("/my/invalid/path")
self.assertIsNotNone(fut)
self.assertRaises(ValueError, fut.result())
堆栈跟踪是:
"test.py", line 25, in test_load_invalid_res
self.assertRaises(ValueError, fut.result())
File "/usr/lib/python3.5/concurrent/futures/_base.py", line 398, in result
return self.__get_result()
File "/usr/lib/python3.5/concurrent/futures/_base.py", line 357, in __get_result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
ValueError: Could not find resource in resource path: /my/invalid/path
但堆栈跟踪实际上告诉我有一个 ValueError
!?为什么传播超出 assertRaises
?
编辑:
以下代码不起作用:
try:
fut.result()
except ValueError as e:
pass
有效的是例如:
try:
fut.result()
except Exception as e:
self.assertIsInstance(e, ValueError)
您正在调用该方法并将结果传递给 assertRaises
。由于错误发生在调用 assertRaises 之前,因此不会捕获异常。
assertRaises
接受一个在 try/except 中调用自身的可调用对象。您的代码应该是:
self.assertRaises(ValueError, fut.result)
没有调用 parens。或者,您可以将其用作上下文管理器:
with self.assertRaises(ValueError):
fut.result()
我更改了对 bar
的调用,该调用同步返回以返回 Future。当 bar
的方法实际执行时,它会引发一个 ValueError
。
单元测试实际上确保了这一点。
正在改变
self.assertRaises(ValueError, foo.bar("/my/invalid/path"))
至
self.assertRaises(ValueError, fut.result())
由于某种原因不再是有效断言。
整个新代码是:
fut = foo.bar("/my/invalid/path")
self.assertIsNotNone(fut)
self.assertRaises(ValueError, fut.result())
堆栈跟踪是:
"test.py", line 25, in test_load_invalid_res
self.assertRaises(ValueError, fut.result())
File "/usr/lib/python3.5/concurrent/futures/_base.py", line 398, in result
return self.__get_result()
File "/usr/lib/python3.5/concurrent/futures/_base.py", line 357, in __get_result
raise self._exception
File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
ValueError: Could not find resource in resource path: /my/invalid/path
但堆栈跟踪实际上告诉我有一个 ValueError
!?为什么传播超出 assertRaises
?
编辑:
以下代码不起作用:
try:
fut.result()
except ValueError as e:
pass
有效的是例如:
try:
fut.result()
except Exception as e:
self.assertIsInstance(e, ValueError)
您正在调用该方法并将结果传递给 assertRaises
。由于错误发生在调用 assertRaises 之前,因此不会捕获异常。
assertRaises
接受一个在 try/except 中调用自身的可调用对象。您的代码应该是:
self.assertRaises(ValueError, fut.result)
没有调用 parens。或者,您可以将其用作上下文管理器:
with self.assertRaises(ValueError):
fut.result()