使用pytest mock time.time()时遭遇ModuleNotFoundError问题求助
解决ModuleNotFoundError及Mock路径错误问题
1. 修复导入路径报错
报错ModuleNotFoundError: No module named core.p_core.common.CommonBase的核心原因是Python无法找到core包的搜索路径,按以下方式解决:
- 运行pytest时,确保在包含
core文件夹的项目根目录下执行命令 - 如果测试文件放在子目录(比如
tests文件夹),在测试文件开头添加路径配置:import sys from pathlib import Path # 根据实际目录层级调整,将项目根目录加入Python搜索路径 sys.path.append(str(Path(__file__).parent.parent))
2. 修正Mock路径
你当前的Mock路径core.p_core.common.CommonBase.time.time完全错误,因为time是标准库模块,并非CommonBase类的属性。需根据time的实际导入位置调整:
情况A:time在common.py全局导入(文件开头写import time)
修正后的测试代码:
import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent)) from core.p_core.common import CommonBase def test_get_timestamp(mocker): # Mock common.py中导入的time.time方法 mocker.patch("core.p_core.common.time.time", return_value=1680087494.2400253) assert CommonBase.get_timestamp('TEST') == "TEST-1680087494.2400253"
情况B:time在get_timestamp方法内导入(方法里写import time)
修正后的测试代码:
import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent)) from core.p_core.common import CommonBase def test_get_timestamp(mocker): # Mock方法内导入的time.time mocker.patch("core.p_core.common.get_timestamp.time.time", return_value=1680087494.2400253) assert CommonBase.get_timestamp('TEST') == "TEST-1680087494.2400253"
内容的提问来源于stack exchange,提问作者randomDev
相关产品推荐
相关产品推荐

