Мне нужно обернуть класс в макет примерно так:
Оригинальный код:
class _InnerImpl(object):
def __init__(self, arg1, arg2, arg3):
# do stuff
Я хотел бы сделать что-то вроде этого:
from unittest.mock import patch
def my_wrapper(*args, **kwargs):
kwargs['arg1'] = gen_next_value() # change one of the arguments
return _InnerImpl(*args, **kwargs) # call the real thing with modified args
def run(user_input):
with patch(_InnerImpl, my_wrapper):
some_method(user_input)
* 1008К сожалению, как работает
patch
, я не могу назвать «реальную вещь», потому что она также вызывается внутри блока
with patch
.Это приводит к бесконечному циклу рекурсии.
Я использую это в реализации вне модульного теста.Так что это не для юнит-тестов.Я пробовал разные вещи, такие как сохранение __init__
ссылки, используя wraps
.Ничего не работает.