0
私はbar
への呼び出しを、Futureを返すことに同期して返しました。 bar
のメソッドが実際に実行されると、ValueError
が発生します。 単体テストでは実際にそれが保証されています。assertRaisesが先物で動作しません
今すぐ
self.assertRaises(ValueError, fut.result())
に
self.assertRaises(ValueError, foo.bar("/my/invalid/path"))
を変更することは、もはや何らかの理由で有効アサートされません。
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
を超えて伝播していますか?
EDIT:
次のコードは動作しません:
try:
fut.result()
except ValueError as e:
pass
何働くことは例えばです:
try:
fut.result()
except Exception as e:
self.assertIsInstance(e, ValueError)
もちろんです。ありがとうございます - 休暇が必要です;) – abergmeier