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

如何Mock同一文件中未被测试方法导入的函数?

解决Python Mock中无法patch本地函数的问题

你遇到的问题其实是mock.patch的目标路径没写对——它不像mock系统库(比如math.ceil)那样直接写函数名就行,针对本地函数,必须指定被调用代码所在模块中的函数引用路径。

问题原因

你的method_2是在当前模块里调用method_1的,所以当你用patch('method_1')时,mock找不到这个目标——它需要明确知道要替换哪个模块里的method_1引用,而不是只写函数名。

修复方法

把test_2里的patch目标改成当前模块的method_1就行,直接用__main__.method_1(如果是直接运行这个脚本的话),或者用你的脚本文件名(比如如果脚本叫unittest.py,也可以写unittest.method_1)。修改后的test_2代码如下:

def test_2():
    m = Mock(return_value=20)
    # 指定当前模块的method_1引用
    with patch('__main__.method_1', m) as p:
        a = method_2()
        assert(a == 21)

补充原理

mock.patch的核心逻辑是替换被调用处的引用:

  • 对于math.ceil,你在method_1里导入的是系统库的ceil,所以直接patchmath.ceil就能替换掉这个引用;
  • 对于method_1,method_2调用的是当前模块里的method_1引用,所以必须patch当前模块中的这个引用,而不是只写函数名。

这样修改后,你的test_2就能正常通过了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:20:22