在单元测试期间没有被try-except块捕获的异常

时间:2017-10-16 09:09:35

标签: python exception exception-handling mocking

我的代码中有这个:

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。发生了什么事?

1 个答案:

答案 0 :(得分:0)

请注意@patch('code.api')行。这表示code.api中的补丁一切正常。 ParseException也可能位于api模块中,因此也进行了修补。如果您调试代码,您会看到type(ParseException)不是Exception的实例,而是MagicMock的实例。

我只花了一个小时在桌子上敲我的头,希望这有助于某人。