Ste*_*ude 5 mocking python-2.7
我想测试一个递归函数然后模拟相同的函数.对于第一个调用,我想实际调用我的模块中出现的函数.当它自己调用时,我想使用mock来模拟调用,并指定第二个递归调用的返回值.
我的意思是一个非常简单的例子:
def some_function(input_value):
if input_value == some_appropriate_value:
return foo
else:
return some_function(some_other_value)
Run Code Online (Sandbox Code Playgroud)
some_function第二次调用它时如何模拟?如果我使用类似@ mock.patch装饰器的东西,我实际上无法测试它,因为some_function 将被模拟为所有调用.
有关如何做到这一点的任何建议?我找不到任何明显的Stack Overflow问题来讨论这个问题.
如果在修补之前保存该函数,则可以调用正确的版本。
copy_of_foo = foo
with patch('...foo') as foo_mock:
copy_of_foo(args...)
Run Code Online (Sandbox Code Playgroud)
为了让你的修补函数以不同的方式调用,你可以尝试一些事情:1. side_effects 和 2. 子类化一个模拟对象来覆盖函数调用并保留一个计数器。