Python单元测试:如何让test1中Mock的test3作用于test2实例?
Python Mock 问题解决方法
问题根源
你当前mock路径错误:test2.py中通过from test3 import test3将test3类导入到了test2的命名空间,此时test2使用的是自己命名空间里的test3引用,而非test3模块原有的类。你之前@mock.patch('test3.test3')仅修改了test3模块里的类,不会影响test2已经导入的引用,所以test2实例化时依然用的是真实的test3类。
修正后的代码
将mock目标改为test2模块中的test3引用,同时简化mock设置:
from unittest import mock from test2 import test2 class test1(): @mock.patch('test2.test3') # 关键:mock test2模块内的test3引用 def fun2(self, mock_test3): # 配置mock实例的属性或行为 mock_test3_instance = mock.MagicMock() mock_test3_instance.name = "mock_rahul" mock_test3.return_value = mock_test3_instance test2Object = test2() # 验证mock是否生效 print(type(test2Object.test3object)) # 输出 <class 'unittest.mock.MagicMock'> print(test2Object.test3object.name) # 输出 mock_rahul main1 = test1() main1.fun2()
额外提示
- 若你需要
test3object是字典类型,直接替换为mock_test3.return_value = {"name": "mock_rahul"}即可。 - Python mock的核心原则:mock对象被使用的模块中的引用,而非对象定义的模块。
内容的提问来源于stack exchange,提问作者Rahul Kumar
相关产品推荐
相关产品推荐

