【发布时间】:2019-04-25 21:41:16
【问题描述】:
我不熟悉模拟并尝试使用副作用。
我正在尝试根据调用该方法的参数设置模拟类的方法的返回值。在下面的代码中,我试图在模拟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(尝试使用其中的打印语句)。我将如何格式化?
【问题讨论】: