|
| 1 | +# 测试分层说明 |
| 2 | + |
| 3 | +本项目采用分层测试策略,确保从单元到端到端的全面覆盖。 |
| 4 | + |
| 5 | +## 测试层级 |
| 6 | + |
| 7 | +``` |
| 8 | +┌─────────────────────────────────────────────────────────────┐ |
| 9 | +│ L4: 打包产物测试 │ |
| 10 | +│ test_packaging_smoke.py │ |
| 11 | +│ 验证 wheel 安装后 console script 正常工作 │ |
| 12 | +│ 运行时机:uv build 后,在独立虚拟环境中 │ |
| 13 | +├─────────────────────────────────────────────────────────────┤ |
| 14 | +│ L3: 端到端 MCP 测试 │ |
| 15 | +│ test_e2e_mcp.py │ |
| 16 | +│ 通过 stdio 启动真实 MCP Server 进程,验证协议兼容性 │ |
| 17 | +│ 运行时机:CI 常规测试(源码环境) │ |
| 18 | +├─────────────────────────────────────────────────────────────┤ |
| 19 | +│ L2: 集成测试 │ |
| 20 | +│ test_server.py, test_compiler.py, test_*.py │ |
| 21 | +│ 测试模块间交互、工具链集成 │ |
| 22 | +│ 运行时机:CI 常规测试 │ |
| 23 | +├─────────────────────────────────────────────────────────────┤ |
| 24 | +│ L1: 单元测试 │ |
| 25 | +│ test_prompts.py, test_resources.py, test_cache.py │ |
| 26 | +│ 测试独立函数和类的行为 │ |
| 27 | +│ 运行时机:CI 常规测试 │ |
| 28 | +└─────────────────────────────────────────────────────────────┘ |
| 29 | +``` |
| 30 | + |
| 31 | +## 测试文件职责 |
| 32 | + |
| 33 | +### L1: 单元测试 |
| 34 | + |
| 35 | +| 文件 | 职责 | |
| 36 | +|------|------| |
| 37 | +| `test_prompts.py` | 测试 prompt 模板生成 | |
| 38 | +| `test_resources.py` | 测试资源访问 | |
| 39 | +| `test_cache.py` | 测试编译缓存 | |
| 40 | +| `test_mixins.py` | 测试工具 mixin 行为 | |
| 41 | +| `test_resource_limit.py` | 测试资源限制工具 | |
| 42 | +| `test_win_job.py` | 测试 Windows Job Object | |
| 43 | + |
| 44 | +### L2: 集成测试 |
| 45 | + |
| 46 | +| 文件 | 职责 | |
| 47 | +|------|------| |
| 48 | +| `test_server.py` | 测试 MCP Server 工具注册和调用 | |
| 49 | +| `test_compiler.py` | 测试 C++ 编译器集成 | |
| 50 | +| `test_packaging.py` | 测试打包配置、模板访问、MCP 类型 | |
| 51 | + |
| 52 | +### L3: 端到端 MCP 测试 |
| 53 | + |
| 54 | +| 文件 | 职责 | |
| 55 | +|------|------| |
| 56 | +| `test_e2e_mcp.py` | 真实 MCP 协议握手和工具调用 | |
| 57 | + |
| 58 | +### L4: 打包产物测试 |
| 59 | + |
| 60 | +| 文件 | 职责 | |
| 61 | +|------|------| |
| 62 | +| `test_packaging_smoke.py` | 验证 wheel 安装后 console script | |
| 63 | + |
| 64 | +## CI 测试流程 |
| 65 | + |
| 66 | +```yaml |
| 67 | +# 1. 单元测试 + 集成测试(多 Python 版本) |
| 68 | +test-unit: |
| 69 | + - uv run pytest tests/ -v -m "not integration" |
| 70 | + |
| 71 | +# 2. 集成测试(标记为 integration) |
| 72 | +test-integration: |
| 73 | + - uv run pytest tests/ -v -m "integration" |
| 74 | + |
| 75 | +# 3. 打包产物测试(uv build 后) |
| 76 | +test-packaging: |
| 77 | + - uv build |
| 78 | + - pip install dist/*.whl |
| 79 | + - pytest tests/test_packaging_smoke.py -v -m "packaging" |
| 80 | +``` |
| 81 | +
|
| 82 | +## 测试标记 |
| 83 | +
|
| 84 | +| 标记 | 用途 | 示例 | |
| 85 | +|------|------|------| |
| 86 | +| `@pytest.mark.integration` | 集成测试 | 需要 g++ 或外部依赖 | |
| 87 | +| `@pytest.mark.packaging` | 打包测试 | 需要从 wheel 安装 | |
| 88 | + |
| 89 | +## 运行测试 |
| 90 | + |
| 91 | +```bash |
| 92 | +# 运行所有单元测试和集成测试 |
| 93 | +uv run pytest tests/ -v |
| 94 | +
|
| 95 | +# 只运行单元测试 |
| 96 | +uv run pytest tests/ -v -m "not integration" |
| 97 | +
|
| 98 | +# 只运行集成测试 |
| 99 | +uv run pytest tests/ -v -m "integration" |
| 100 | +
|
| 101 | +# 运行端到端 MCP 测试 |
| 102 | +uv run pytest tests/test_e2e_mcp.py -v |
| 103 | +
|
| 104 | +# 运行打包产物测试(需要先安装 wheel) |
| 105 | +pytest tests/test_packaging_smoke.py -v -m "packaging" |
| 106 | +``` |
| 107 | + |
| 108 | +## 测试覆盖目标 |
| 109 | + |
| 110 | +- **L1 单元测试**: 覆盖核心逻辑,快速反馈 |
| 111 | +- **L2 集成测试**: 覆盖模块交互,验证工具链 |
| 112 | +- **L3 端到端测试**: 覆盖 MCP 协议兼容性 |
| 113 | +- **L4 打包测试**: 覆盖发布产物可用性 |
0 commit comments