Pytest Mock类函数报错:'lib.servers'非包,模块无法找到
问题分析与解决步骤
1. 让lib成为合法Python包
Python要求目录下存在__init__.py文件才会将其识别为包。你的lib目录缺少这个文件,所以报错提示它不是包。解决方法很简单:在lib目录下创建一个空的__init__.py文件。
调整后的项目结构:
lib -> __init__.py -> servers.py Tests -> lib -> test_servers.py
2. 修正Mock路径的拼写错误
你的测试代码里把类名写错了:原类是GetServers,但你写成了GetServer(少了末尾的s),这会直接导致找不到目标类。同时注意get_server方法的定义——如果它是实例方法,应该加上self参数;如果是类方法,建议加上@classmethod装饰器,不过不管哪种情况,先修正类名拼写是前提:
修正后的测试代码片段:
def test_config_(caplog, mocker): config = "test" # 修正类名拼写:GetServers 而非 GetServer mocker.patch('lib.servers.GetServers.get_server', return_value=config)
3. 确保测试能定位到lib包
运行测试时,要保证Python能找到根目录下的lib包:
- 最简便的方式是在项目根目录(包含
lib和Tests的目录)执行pytest命令,这样Python会自动将当前目录加入模块搜索路径。 - 如果你需要在其他路径运行测试,可以在
test_servers.py开头添加代码,手动把项目根目录加入搜索路径:
import sys from pathlib import Path # 从当前测试文件位置(Tests/lib/test_servers.py)往上两级找到根目录 sys.path.append(str(Path(__file__).parent.parent.parent))
内容的提问来源于stack exchange,提问作者Neakathh
相关产品推荐
相关产品推荐

