替换pytest中的关键字参数

Replacing keyword argument in pytest

我正在做一些测试,我想模拟一个函数的一个参数。

例如我得到的函数如下:

def foo(arg1, arg2):
    'do something'

并调用该函数:

foo(1, 2)

我想以某种方式对其进行 monkeypatch 以使用 3 而不是 2。这可能吗?

试过类似的东西:

monkeypatch.setattr('foo', partial(foo, arg2= 3))

但是我遇到了类型错误:foo() 得到了关键字参数的多个值'arg2'

知道如何解决这个问题吗?

您可以简单地为函数添加别名:

old_foo = monkeypatch.foo
def foo(arg1, arg2):
    return old_foo(arg1, 3)

monkeypatch.foo = foo