【问题标题】:Replacing keyword argument in pytest替换pytest中的关键字参数
【发布时间】:2017-12-08 19:47:29
【问题描述】:

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

例如我得到的函数如下:

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

并调用该函数:

foo(1, 2)

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

试过类似的东西:

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

但是我得到了类型错误:foo() got multiple values for keyword argument 'arg2'

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

【问题讨论】:

  • 您似乎在间接测试 foo,并且您正在尝试修改对 foo 的调用。请编辑以显示:1. def test_bar,2. 除了 def foo 之外,还调用了 foo(可能是 bar?)。您可能应该直接测试 foo,然后在 bar 中使用依赖注入。

标签: python pytest monkeypatching


【解决方案1】:

你可以简单地给函数起别名:

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

monkeypatch.foo = foo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多