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

如何Patch父类中导入的模块?Python测试问题求助

解决mock load_json时出现“does not have attribute 'load_json'”的问题

报错原因

你当前patch的是子类模块(path.to.child)中的load_json,但load_json是在父类所在的模块里导入并被func_1调用的,子类模块并没有这个属性,所以会触发“does not have attribute 'load_json'”错误。

正确解决方法

方法1:patch父类模块中的load_json

因为父类的func_1实际调用的是其自身模块内的load_json引用,所以需要patch父类所在模块的load_json。假设父类位于myapp.parent_module,测试代码修改如下:

from unittest.mock import patch
from path.to.child import Child

@patch("myapp.parent_module.load_json", return_value={"my":"file contents"})
def test_func_2(mock_load_json):
    c = Child()
    # 根据func_1和func_2的逻辑设置预期值
    expected = {"my":"file contents", "additional data": "some new data"}
    assert c.func_2() == expected

方法2:直接mock父类的func_1方法

如果只想测试子类func_2的自身逻辑,也可以跳过load_json,直接mock父类的func_1方法,避免依赖文件加载逻辑:

from unittest.mock import patch
from path.to.child import Child

@patch.object(Child, "func_1", return_value={"my":"mock data", "additional data": "some new data"})
def test_func_2(mock_func_1):
    c = Child()
    # 根据func_2的实际处理逻辑设置预期结果
    assert c.func_2() == {"my":"mock data", "additional data": "some new data"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:42:51