【发布时间】:2019-06-05 04:02:01
【问题描述】:
我需要像这样将一个类包装在一个模拟中:
原码:
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)
不幸的是patch 的工作方式,我不能称之为“真实的东西”,因为它也在with patch 块内被调用。这会导致无限递归循环。
我在单元测试之外的实现中使用它。所以这不适用于单元测试。我尝试了各种方法,例如保存__init__ 参考,使用wraps。没有任何效果。
【问题讨论】:
标签: python mocking python-mock