【发布时间】:2017-08-02 12:03:10
【问题描述】:
我如何测试 Python 函数是否被调用,完全不改变其行为?
有很多相关的帖子,但我找不到涵盖所有内容的帖子:
- How to test that a function is called within a function with nosetests(改变行为)
- Patching a method without changing how the method works?(不适用于参数和返回值)
基本上,我只需要监视函数就可以知道它是否被调用了。
例如,以下 sn-p 具有极其令人惊讶的行为
from unittest.mock import patch
def func(a,b):
print('was called')
return a * b
with patch('test.func') as patched_function:
print(func(4,5))
print(patched_function.called)
输出:
<MagicMock name='func()' id='1721737249456'>
True
was called
20
False
虽然我只是期待
was called
20
True
【问题讨论】:
-
使用您在第一次调用时设置为
True的全局变量? -
如果
func位于您无法修改的模块中,则不起作用,这几乎总是您在修补时要查找的内容 -
你也可以使用一个全局变量作为一个函数被调用次数的计数器。比如:
def func(i): i+=1 -
我无法修改
func,它不在我的代码库中。见我上面的评论
标签: python python-3.x