gpt4 book ai didi

python - 不能将 attach_mock 与 autospec 函数模拟一起使用

转载 作者:行者123 更新时间:2023-12-04 16:45:52 29 4
gpt4 key购买 nike

图书馆模块:

# 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"),
]
)
mocker fixture 来自 pytest-mock 插入。执行 MCVEpython -m pytest .

对于 weird,此测试失败 reasons .
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 不会丢失他们的汽车规范 ?

最佳答案

这实际上是 Python 中的一个错误。它在 2019 年底得到修复,补丁版本:

  • Python 3.8.2+
  • Python 3.7.5+

  • 原始帖子中的测试现在正在通过固定版本。 Python 3.6 没有向后移植,即 security only现在这样将永远被窃听。 🐛

    这些是相关的 PR 和问题跟踪链接:

    bpo-21478 :Autospec functions should propagate mock calls to parent

    bpo-21478 :Record calls to parent when autospecced objects are used as child with attach_mock

    bpo-38473 :Handle autospecced functions and methods used with attach_mock

    Karthikeyan Singaravelan 的补丁。

    关于python - 不能将 attach_mock 与 autospec 函数模拟一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367526/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com