Saq*_*Ali 2 python unit-testing mocking
我一直在为我的测试用例使用 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()
Run Code Online (Sandbox Code Playgroud)
现在我想做一些稍微不同的事情:我只想检查一个修补过的方法是否被调用过一次(通过使用.assert_called_once().但是,我不想改变方法的行为,也不想指定一个假的返回值。我怎样才能做到这一点?
如果您只想使用patch其调用记录功能,而不side_effect模拟原始函数的行为,则将原始函数指定为模拟的 :
@patch('my_function', side_effect=my_function)
...
Run Code Online (Sandbox Code Playgroud)
这个side_effect名字有误导性。如果模拟有一个side_effect函数,则调用模拟将调用side_effect并返回或引发任何side_effect返回或引发的内容。使用原始函数side_effect意味着我们得到原始函数的行为。(side_effect除了函数之外,还可以是其他一些东西,但我们在这里不需要那个功能。)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |