使用unittest Mock类方法时触发ModuleNotFoundError问题
问题解决:Mock外部类方法时出现ModuleNotFoundError
错误原因
你遇到的ModuleNotFoundError: No module named 'foo'核心问题有两个:
- Mock路径完全错误:你试图mock
foo.Foo.get_value,但Foo类本身并没有get_value方法——这个方法属于Handler类;同时你的项目结构里foo.py在parentfolder目录下,不存在顶级的foo模块。 - 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
相关产品推荐
相关产品推荐

