我正在使用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

10-04 14:42