Python中无法正确Mock依赖模块方法,测试未按预期失败
问题原因与修复方案
核心问题:Mock路径错误
你当前Mock的是util.rename,但main.py通过from util import rename已经把rename函数导入到了main模块自身的命名空间中,use_rename实际调用的是main模块里的rename引用,而非原始的util.rename。这导致你的Mock根本没作用到被测试的代码上,use_rename还是执行原始函数返回"name",断言自然会成功。
修复代码
把Mock的目标改成main.rename即可,修改后的test_main.py如下:
import sys import os from unittest.mock import patch sys.path.append(os.path.join(os.path.dirname(__file__), "..")) from main import use_rename @patch("main.rename") # 替换为main模块内的rename引用 def test_use_rename(mock_rename): mock_rename.return_value = "name2" assert use_rename() == "name" # 现在这个断言会失败,符合预期
补充说明
Python中使用from xxx import y时,会将y复制一份到当前模块的命名空间,后续代码调用的都是这个副本。要让Mock生效,必须针对被测试代码实际调用的那个引用所在的位置进行patch,而非原始函数的位置。
内容的提问来源于stack exchange,提问作者hh54188
相关产品推荐
相关产品推荐

