You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何mock.assert_called_once()断言不通过?明明调用了f2函数

问题分析与解决方案

核心错误点

  • 断言方式错误:通过mocker.patch("functions.f2")获取的mock对象本身就是被替换后的f2函数,不需要通过mock.f2调用断言方法,直接使用mock对象即可检测调用情况。
  • 多余的函数调用:测试用例中额外调用了f2(1),这不仅会让mock的调用次数超出预期,而且完全多余——f1(1)已经会触发f2(4)的调用。

修正后的测试代码

def test_f1(mocker):
    mock = mocker.patch("functions.f2")
    assert f1(1) == 1
    # 精准断言:验证f2是否被调用一次,且参数为4
    mock.assert_called_once_with(4)

额外注意事项

确保patch的路径正确:如果f1和f2定义在functions.py模块中,且测试文件与该模块在同一目录,"functions.f2"的路径是正确的;如果函数和测试代码在同一个文件中,路径需改为"__main__.f2"(或当前模块名称)。

内容的提问来源于stack exchange,提问作者ms360

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 09:15:38