我是mock的新手,正在尝试使用side_effects。
我正在尝试基于调用该方法的参数设置模拟类的方法的返回值。在下面的代码中,当模拟MyClass
时,我正在尝试设置some_function
的返回值。
# application.py
from my_module.my_submodule import MyClass
def my_function(var1):
instance = MyClass()
instance.some_function(var1)
以及我的测试文件
# test_application.py
import mock
import application
def test_my_function():
with mock.patch('application.MyClass') as MockClass:
MockClass.return_value.my_function.return_value = some_return
application.my_function(var1)
这段代码的作用是使
some_function
返回some_return
,但我想要的是将some_return
替换为一个函数,这个函数接收被调用时var1
参数的值。问题在于,我不知道如何定义模拟对象来预测
some_function
的调用参数。我尝试了这篇帖子中讨论的内容changing the side effect of a mock object's method created with patch,但我无法弄清楚如何格式化它。
我的尝试代码如下:
# test_application.py
import mock
import application
def test_my_function():
with mock.patch('application.MyClass') as MockClass:
MockClass.return_value.my_function.return_value = some_return
# Breaking very long line, in my code it's actually one line.
MockDataPrep.return_value.extract_preprocessed_citizen_data.\
side_effect =\
mock.MagicMock(side_effect=my_side_effect)
application.my_function(var1)
其中函数my_side_effect
的代码如下:
def my_side_effect(var1):
return_val = some_manipulation_of_var1(var1)
if something:
return `abc`
else:
raise LookupError
但是似乎 my_side_effect
从未被执行过(已尝试在其中添加打印语句)。我该如何格式化它?