Python 在pytest中替换关键字参数

Python 在pytest中替换关键字参数,python,pytest,monkeypatching,Python,Pytest,Monkeypatching,我正在做一些测试,我想模拟一个函数的一个参数 例如,我得到了如下函数: def foo(arg1, arg2): 'do something' 并调用该函数: foo(1, 2) old_foo = monkeypatch.foo def foo(arg1, arg2): return old_foo(arg1, 3) monkeypatch.foo = foo 我想用3而不是2来修补它。可能吗 尝试了类似于: monkeypatch.setattr('foo', par

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

例如,我得到了如下函数:

def foo(arg1, arg2):
    'do something'
并调用该函数:

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

monkeypatch.foo = foo
我想用3而不是2来修补它。可能吗

尝试了类似于:

monkeypatch.setattr('foo', partial(foo, arg2= 3))
但我得到了类型错误:foo()得到了关键字参数“arg2”的多个值


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

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

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

monkeypatch.foo = foo

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

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

monkeypatch.foo = foo

您似乎在间接测试foo,并且试图修改对foo的调用。请编辑以显示:1<代码>def测试条,2。其中除了
def foo
之外,还调用了
foo
bar
可能?)。您可能应该直接测试foo,然后在
bar
中使用依赖项注入。您似乎是在间接测试foo,并试图修改对foo的调用。请编辑以显示:1<代码>def测试条,2。其中除了
def foo
之外,还调用了
foo
bar
可能?)。您可能应该直接测试foo,然后在
bar
中使用依赖项注入。