不能将attach\u mock与autospec函数m一起使用

2024-09-30 20:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

库模块:

# mod.py
def foo():
    bar1("arg1")
    bar2("arg2x", "arg2y")

def bar1(x):
    pass

def bar2(x, y):
    pass

测试模块:

# test_mod.py
from mod import foo

def test_foo(mocker):
    mock = mocker.MagicMock()
    mock.attach_mock(mocker.patch("mod.bar1"), "b1")
    mock.attach_mock(mocker.patch("mod.bar2", autospec=True), "b2")
    foo()
    mock.assert_has_calls(
        [
            mocker.call.b1("arg1"),
            mocker.call.b2("arg2x", "arg2y"),
        ]
    )

夹具来自^{}插件。用python -m pytest执行MCVE

对于weirdreasons,此测试失败。你知道吗

E       AssertionError: Calls not found.
E       Expected: [call.b1('arg1'), call.b2('arg2x', 'arg2y')]
E       Actual: [call.b1('arg1')]

没有autospec它就可以工作。使用autospec会破坏attach_mock特性吗?对foo的测试应该如何断言对依赖项bar1bar2的调用的顺序和参数而不丢失它们的autospec?你知道吗


Tags: modfoodefcallmockb2b1mocker