Я сменил звонок на bar
, который вернулся синхронно, чтобы вернуть Будущее. Когда фактически выполняется метод 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
?
EDIT:
Следующий код не работает:
try:
fut.result()
except ValueError as e:
pass
Что работает, например .:
try:
fut.result()
except Exception as e:
self.assertIsInstance(e, ValueError)
Конечно. Спасибо - нужен отпуск;) – abergmeier