Исправление метода уровня модуля в общем виде после импорта - PullRequest
0 голосов
/ 22 марта 2020

Я буду использовать следующий пример для иллюстрации своих потребностей.

Допустим, у меня есть модуль some_path.module.py со следующим кодом:

def method_i_want_to_patch(*args, **kwargs):
   ...  # some implementation here

И в других местах в производственный код, который у меня есть:

from some_path.module import method_i_want_to_patch

Теперь в своих тестах я бы хотел установить этот метод для всех модульных тестов. У меня есть базовый класс для тестов, который наследуется от unittest.TestCase. Тем не менее, из-за некоторых очисток и других вещей, которые необходимо выполнить, исправления добавляются с помощью метода, который используется в отдельных тестовых случаях, который в основном имеет вызов patch("...") и вызовы patch.start().

Проблема в том, что метод импортируется другими модулями, поэтому его исправление там "слишком поздно". Один из вариантов, который у меня есть, - изменить some_path.module.py на:

def method_i_want_to_patch(*args, **kwargs):
   return _method_i_want_to_patch_impl(args, kwargs)

def _method_i_want_to_patch_impl(*args, **kwargs):
   ...  # some implementation here

, а затем внести исправления с помощью patch("some_path.module. _method_i_want_to_patch_impl", mock), но при этом изменяется производственный код только для того, чтобы включить тестирование, что мне не очень нравится. Существуют ли другие чистые опции, которые не изменят производственный код, но все же сохранят способ, которым построена тестовая инфраструктура?

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