Python Mock测试报错:找不到dummy_path.csv模块,求解决
问题原因分析
出现No Module found named dummy_path.csv错误,核心原因是你mock的read_df路径不正确,导致mock未生效,实际的read_df函数被执行,而该函数内部可能存在错误逻辑(比如误将文件名当作模块导入),或者尝试读取文件时触发了类似模块导入的异常。
解决方案
1. 修正Mock的目标路径
Python的unittest.mock.patch是基于模块命名空间工作的,你需要patch被测试函数filter_df实际引用的read_df,而非read_df的原始定义模块。
比如,假设filter_df所在的模块pr是这样导入read_df的:
from plugins.qa_plugins.preprocessing import read_df
那你需要将patch的目标改为pr.read_df,而非plugins.qa_plugins.preprocessing.read_df:
@patch('pr.read_df') # pr是filter_df所在的模块名 def test_filter_df(self, read_df_mock): # 后续测试逻辑保持不变
2. 排查read_df的实际实现
如果修正patch路径后仍报错,说明实际的read_df函数内部存在错误,比如误将传入的文件名当作模块执行import操作。检查read_df的代码,确保它是通过pandas的read_csv等方法读取文件,而非进行模块导入。
3. 处理装饰器的影响
由于read_df被save_output_to_file装饰,若装饰器在原始模块中应用,需确保mock覆盖的是装饰后的函数。如果需要mock装饰器本身,可添加额外的patch:
@patch('plugins.qa_plugins.preprocessing.save_output_to_file') @patch('pr.read_df') def test_filter_df(self, read_df_mock, save_output_to_file_mock): # 让装饰器返回原函数,避免干扰mock save_output_to_file_mock.return_value = lambda func: func # 后续测试逻辑...
清理无效代码
你测试代码中创建的save_output_to_file_mock未实际替换目标装饰器,属于无效代码,可直接删除。
内容的提问来源于stack exchange,提问作者Uplabdhi Khare
相关产品推荐
相关产品推荐

