Макет исключения правильно в тесте - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть блок try catch, и я хочу перехватить основную функцию, вызываемую для возврата исключения с сообщением ->

  def some_func():  
     try:
        my_function()
    except Exception as e:
        if e.message == 'XYZ':
            # do stuff
            return
        raise

Я пытаюсь проверить это, но мой тест продолжает подниматьвместо исключения:


    @mock.patch('import_path_for_my_function')
    def test_some_func(self, mock_my_func):

        mock_my_func.side_effect = mock.Mock(side_effect=Exception('XYZ'))
        some_func()
        # do some assertions



но похоже, что вместо этого возникает исключение:

  File "/usr/local/lib/python3.7/unittest/mock.py", line 960, in __call__
    return _mock_self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.7/unittest/mock.py", line 1026, in _mock_call
    result = effect(*args, **kwargs)
  File "/usr/local/lib/python3.7/unittest/mock.py", line 960, in __call__
    return _mock_self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.7/unittest/mock.py", line 1020, in _mock_call
    raise effect
Exception: XYZ

Почему это происходит, и как мне перехватить my_function, чтобы вызвать исключение, которое может бытьпойман методом, вызывающим его.

1 Ответ

0 голосов
/ 26 сентября 2019

Я не уверен, почему, но делать это в завернутом виде, как это сработало.

    def test_some_func(self):

        with mock.patch('path_to_my_function', side_effect=Exception('XYZ')):
            some_func()
            # do some assertions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...