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

如何使用pytest模拟嵌套调用场景中的函数B2?

解决模块内函数调用的Mock问题

核心原因

你遇到的问题是因为B1在B模块内部调用B2时,直接引用的是B模块命名空间里的B2。你之前用mocker.patch('B.B2')的方向没错,大概率是测试代码里mock的时机不对,或者没正确验证调用。

正确的Mock写法

你需要在导入A1之前完成对B.B2的Mock,确保B模块加载时,B2已经被替换成Mock对象。测试代码修改如下:

def test_a1(mocker):
    # 模拟B模块中的B2函数,设置返回值
    mock_b2 = mocker.patch('B.B2', return_value='mocked_result')
    # 必须在Mock之后再导入A1,保证替换生效
    from A import A1
    # 执行被测试函数
    A1()
    # 验证B2是否被正确调用
    mock_b2.assert_called_once()

为什么其他路径会报错?

  • A.B2:A模块只导入了B1,根本没有B2这个对象,路径不存在自然报错。
  • A.B1.B2:B1是一个函数,函数本身没有B2这个属性,所以这个路径无效。
  • A.B.B2:A模块里没有B这个子模块,路径不成立。

关键原理

Python的Mock是通过替换模块级别的属性生效的。B1里调用的B2本质是B模块中的B2函数,只要替换B.B2,B1执行时就会自动使用Mock后的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:45:12