请参阅以下代码
def add(x, y):
return x + y
from ymath import add
def calc(x, y):
return add(x, y)
import mock
class YAdd:
def __init__(self, a):
print 'YAdd init with a %s' % (a, )
self.a = a
def __call__(self, x, y, **kwargs):
return x + y + self.a
def calc(x, y):
print 'calc called...'
@mock.patch('ymath.add', YAdd(x))
def inner():
from calc import calc
print calc(x, y)
inner()
calc(8, 3) # Expected: 8 + 8 + 3 = 19
calc(4, 5) # Expected: 4 + 4 + 5 = 13
结果如下所示,第二次调用的期望值为13
calc called...
YAdd init with a 8
19
calc called...
YAdd init with a 4
17
答案 0 :(得分:3)
你在错误的地方打补丁。您应该修补calc.add
,而不是ymath.add
。请参阅where to patch上的文档。
另请注意,没有理由仅使用补丁装饰器来定义内部函数:您可以将其用作上下文管理器。
def calc(x, y):
print 'calc called...'
with mock.patch('calc.add', YAdd(x)):
from calc import calc
print calc(x, y)