Python 2.7 用pythonmock在重复调用中模拟函数

Python 2.7 用pythonmock在重复调用中模拟函数,python-2.7,mocking,Python 2.7,Mocking,我想测试一个递归函数,然后模拟同一个函数。对于第一次调用,我想实际调用模块中出现的函数。当它调用自身时,我希望使用模拟调用,并指定第二个递归调用的返回值 我的意思的一个非常简单的例子: def some_function(input_value): if input_value == some_appropriate_value: return foo else: return some_function(some_other_value) 如何

我想测试一个递归函数,然后模拟同一个函数。对于第一次调用,我想实际调用模块中出现的函数。当它调用自身时,我希望使用模拟调用,并指定第二个递归调用的返回值

我的意思的一个非常简单的例子:

def some_function(input_value):
    if input_value == some_appropriate_value:
        return foo
    else:
        return some_function(some_other_value)
如何在第二次调用某个函数时模拟它?如果我使用@mock.patch decorator之类的东西,我实际上无法对它进行测试,因为
某些函数将对所有调用进行模拟


有什么建议吗?我找不到任何明显的堆栈溢出问题来讨论这个问题。

如果在修补之前保存函数,可以调用正确的版本

copy_of_foo = foo
with patch('...foo') as foo_mock:
   copy_of_foo(args...)
为了让您的补丁函数以不同的方式调用,您可以尝试以下几点:1。副作用和2。子类化模拟对象以覆盖函数调用并保留计数器