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

При манипулировании объектами существуют некоторые инструменты, позволяющие изменить результат функции.

Допустим, есть некоторый класс:

class Worker:

    def do_work(self):
        return perform_operation()

И я хочу проверитьслучаи, когда do_work() вызывает несколько исключений в разных ситуациях:

@patch(
    'my.package.Worker.do_work',
    Mock(side_effect=[exc.VeryBadError, exc.NotThatBadError]
))
def test_worker_raise_errors():
    worker_user.call_worker()

Но нет способа передать несколько ошибок в side_effects, как описано выше, он будет запускаться только один раз и Fail только для exc.VeryBadError.

Когда я хочу найти способ запуска test_worker_raise_errors() дважды для каждого исключения, но без создания каждой тестовой функции для исключения.

Есть ли способ запустить один тест несколькимираз для каждого исключения в качестве побочного эффекта и увидеть 2 ошибки в этом случае?

1 Ответ

1 голос
/ 11 октября 2019

Этот простой пример даст вам подсказку:

from unittest.mock import Mock

mock = Mock(
    side_effect=[
        AssertionError('Error 1'), 
        AttributeError('Error 2'),
    ]
)

try:
    mock()
except AssertionError as e:     # Catch the exception so that the execution can continue and we can test further.
    print(e)

try:
    mock()
except AttributeError as e:     # Catch the exception so that the execution can continue and we can test further.
    print(e)

Вывод:

Error 1
Error 2

Вы можете использовать self.assertRaises (...) чтобы сделать его чище.

...