我的代码中有这个:
import api
def do_something():
try:
api = api.Api()
api.call()
except ParseException as e:
logger.exception('Error occurred')
raise ValidationError(detail=e.message)
基本上它调用API并用另一种类型重新引发异常。 我的测试会在抛出异常时检查案例:
@patch('code.api')
def test_exception(self, api_mock):
api_mock.Api.side_effect = ParseException('General Error')
self.assertRaises(
ValidationError,
do_something
)
api_mock.Api.assert_called_once()
但是我的测试失败了,因为ParseException
被抛出而不是ValidationError
。发生了什么事?
答案 0 :(得分:0)
请注意@patch('code.api')
行。这表示code.api
中的补丁一切正常。 ParseException
也可能位于api
模块中,因此也进行了修补。如果您调试代码,您会看到type(ParseException)
不是Exception的实例,而是MagicMock
的实例。
我只花了一个小时在桌子上敲我的头,希望这有助于某人。