You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:08:14