0
我將呼叫改爲bar
,它們同時返回Future。當bar
的方法實際執行時,將產生一個ValueError
。 單元測試實際上確保了這一點。assertRaises不與期貨合作
現在改變
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)
當然。感謝 - 需要休假;) – abergmeier