Разница между side_effect внутри функции и side_effect в декораторе - PullRequest
2 голосов
/ 07 апреля 2020

В чем разница между передачей side_effect в настройках декоратора и внутри функции? Когда я должен использовать один поверх другого?

   @patch(“my_class.Order.get_order”, side_effect=“mock_order”)
def test_order(self, mock_order):

Это альтернативный способ использования его

@patch(“my_class.Order.get_order”)
 def test_order(self, mock_order):
         mock_order.side_effect = self.mock_order

1 Ответ

2 голосов
/ 07 апреля 2020

Нет никакой разницы, кроме времени, когда установлен побочный эффект.
В вашем примере, когда побочный эффект установлен в начале тестовой функции, два варианта являются взаимозаменяемыми семантически, и это вопрос вкуса, который следует использовать (я бы сказал, что декоратор лучше всего показывает, что он предназначен для всего теста, но при этом также учитывается удобочитаемость, если выражение декоратора становится слишком длинным).

В принципе, есть разница , когда применяется побочный эффект, поскольку декоратор создает исправленный объект во время загрузки, а при назначении побочного эффекта в тесте он назначается только во время выполнения , Хотя, насколько я вижу, это не влияет на функциональность теста.

Это верно только в том случае, если всемирно известная переменная или функция используется в качестве побочного эффекта в первом методе, так как сам класс еще не определен, и экземпляр класса не существует во время загрузки. Если вы хотите использовать атрибут или метод самого класса, будет работать только второй вариант. Любой побочный эффект, который зависит от самого класса теста, не будет работать.

Если вы хотите установить побочный эффект только позже в своем тесте или хотите изменить его во время теста, очевидно, что только второй вариант может быть используемый.

Подводя итог:

  • вы всегда можете использовать второй вариант (установка побочного эффекта во время выполнения)
  • второй вариант дает вам возможность сменить сторону эффект позже (хотя это редко полезно)
  • вы можете использовать версию декоратора, если побочный эффект не зависит от самого тестового класса или от любого объекта, созданного только во время выполнения
  • если вы можете использовать версию декоратора, то это семантически эквивалентно второму варианту
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...