使用Python mock重复调用函数

时间:2013-09-20 12:47:49

标签: python-2.7 mocking

我想测试一个递归函数,然后模拟出同样的函数。对于第一个电话,我想实际调用我的模块中显示的功能。当它自己调用时,我想使用mock模拟调用,并指定第二次递归调用的返回值。

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

def some_function(input_value):
    if input_value == some_appropriate_value:
        return foo
    else:
        return some_function(some_other_value)

第二次调用时,如何模拟some_function?如果我使用类似@ mock.patch装饰器的东西,我实际上无法测试它,因为some_function 将被模拟用于所有通话

有关如何执行此操作的任何建议?我找不到任何明显的Stack Overflow问题来讨论这个问题。

1 个答案:

答案 0 :(得分:4)

如果在修补前保存该功能,则可以调用正确的版本。

copy_of_foo = foo
with patch('...foo') as foo_mock:
   copy_of_foo(args...)

为了让您的补丁函数以不同的方式调用,您可以尝试以下几点:1。side_effects和2.子类化模拟对象以覆盖函数调用并保留计数器。