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

使用unittest Mock类方法时触发ModuleNotFoundError问题

问题解决:Mock外部类方法时出现ModuleNotFoundError

错误原因

你遇到的ModuleNotFoundError: No module named 'foo'核心问题有两个:

  1. Mock路径完全错误:你试图mockfoo.Foo.get_value,但Foo类本身并没有get_value方法——这个方法属于Handler类;同时你的项目结构里foo.py在parentfolder目录下,不存在顶级的foo模块。
  2. Mock目标定位错误:要测试Foo.verify_client,你需要mock的是Foo实例中self.handler(也就是Handler类)的get_value方法,而不是Foo类的方法。

正确解决方案

修改测试代码中的@mock.patch装饰器,使用正确的模块路径来mock Handler的get_value方法:

修改后的test.py

import unittest
import mock
from parentfolder.foo import Foo


class testFoo(unittest.TestCase):
    # 使用正确路径mock Handler的get_value方法
    @mock.patch('parentfolder.foo.Handler.get_value', return_value='client')
    def test_verify_client(self, mock_get_value):
        foo = Foo()
        result = foo.verify_client()
        # 可选验证:确认mock方法按预期被调用
        mock_get_value.assert_called_once_with('client')
        self.assertTrue(result)


if __name__ == "__main__":
    unittest.main()

补充说明

  • Mock路径规则:Python mock需要针对「被测试代码实际导入并使用的对象路径」。在foo.py中你已经导入了Handler,所以直接mockparentfolder.foo.Handler.get_value就能替换Foo实例中使用的Handler实例方法。
  • 也可以直接mock原Handler类路径:@mock.patch('parentfolder.handler.Handler.get_value', return_value='client'),效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:55:27