python - 如何在不改变其行为的情况下检查是否调用了 @patched-out python 方法?
问题描述
我一直在为我的测试用例使用 python模拟模块。我经常用装饰器装饰我的测试用例@patch('my_method')
。然后在测试用例的主体中,我设置.return_value
属性或.side_effect
修补方法上的属性来模拟它的行为。同样在测试用例中,我检查了修补方法是否使用.assert_called_once()
. 这工作正常。没问题。例子:
from mock import patch
@patch('my_method')
def test_case_1(self, mock_my_method):
mock_my_method.return_value = None
# Do some testing here
mock_my_method.assert_called_once()
现在我想做一些稍微不同的事情:我只想检查一次修补的方法是否被调用(通过使用.assert_called_once()
.但是,我不想更改方法的行为,也不想指定假的返回值。我怎样才能做到这一点?
解决方案
如果您只想使用patch
它的调用记录功能,而不模拟原始函数的行为,则将原始函数指定为side_effect
模拟函数:
@patch('my_function', side_effect=my_function)
...
这个side_effect
名字具有误导性。如果一个模拟有一个side_effect
函数,调用模拟将调用side_effect
and return 或 raise 无论side_effect
返回或 raise。使用原始函数 asside_effect
意味着我们得到原始函数的行为。(side_effect
可以是除了函数之外的其他几种东西,但我们在这里不需要那个函数。)