我正在使用python的unittest.Mock框架。
我想通过模拟实现以下目标:
原始方法如下:
def mymethod(para1, para2, para3):
return para1 + para2 + para3
我想模拟它以返回第一个para1-丢弃其余的:
def mymethod(para1, para2, para3):
return para1
我看到我们可以设置模拟对象的return_value,但似乎只是一个硬编码的对象。我看到我们可以得到模拟调用的参数,但是只有在调用之后。 -有没有办法获取参数并动态返回?
最佳答案
使用模拟类的side_effect
:
import mock
def mymethod(para1, para2, para3):
return para1 + para2 + para3
m = mock.Mock(side_effect=lambda *args: args[0])
with mock.patch('__main__.mymethod', m):
assert mymethod(1, 2, 3) == 1