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

已打补丁类的方法Mock失效问题求助

问题原因及修复方案

核心问题1:Patch的目标路径错误

你当前patch的是my_module.LegacyClass,但ClassToTest实际使用的是它自己模块(class_to_test.py)里导入的LegacyClass引用。根据unittest.mock的规则,必须patch被测试代码实际依赖的那个引用,也就是class_to_test.LegacyClass,而非原模块中的类。

核心问题2:Mock方法的对象搞错了

legacy_mock是LegacyClass这个类的mock对象,当ClassToTest执行LegacyClass()实例化时,返回的是legacy_mock.return_value(这才是模拟的实例对象)。你之前直接给legacy_mock.get_dict赋值,是给类本身设置方法,而self.legacy.get_dict()调用的是实例的方法,自然不会生效。


修正后的测试代码

from unittest import TestCase, patch, MagicMock
from class_to_test import ClassToTest

@patch('class_to_test.LegacyClass')  # 修正patch路径
class TestClass(TestCase):
    def test_case(self, legacy_mock):
        # 给模拟的实例对象设置get_dict方法
        legacy_mock.return_value.get_dict = MagicMock(return_value={'data': {'value': 1}})
        
        ctt = ClassToTest()
        assert ctt.method_to_test()

这样修改后,ClassToTest创建的self.legacy就是legacy_mock.return_value这个预设好的mock实例,它的get_dict方法会返回你需要的静态字典,测试就能正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:21:01