mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
70 lines
2.6 KiB
Markdown
70 lines
2.6 KiB
Markdown
# 测试覆盖率
|
||
|
||
分析测试覆盖率,识别缺口,并生成缺失的测试以达到 80%+ 的覆盖率。
|
||
|
||
## 步骤 1:检测测试框架
|
||
|
||
| 指标 | 覆盖率命令 |
|
||
|-----------|-----------------|
|
||
| `jest.config.*` 或 `package.json` jest | `npx jest --coverage --coverageReporters=json-summary` |
|
||
| `vitest.config.*` | `npx vitest run --coverage` |
|
||
| `pytest.ini` / `pyproject.toml` pytest | `pytest --cov=src --cov-report=json` |
|
||
| `Cargo.toml` | `cargo llvm-cov --json` |
|
||
| `pom.xml` 与 JaCoCo | `mvn test jacoco:report` |
|
||
| `go.mod` | `go test -coverprofile=coverage.out ./...` |
|
||
|
||
## 步骤 2:分析覆盖率报告
|
||
|
||
1. 运行覆盖率命令
|
||
2. 解析输出(JSON 摘要或终端输出)
|
||
3. 列出**覆盖率低于 80%** 的文件,按最差情况排序
|
||
4. 对于每个覆盖率不足的文件,识别:
|
||
* 未测试的函数或方法
|
||
* 缺失的分支覆盖率(if/else、switch、错误路径)
|
||
* 增加分母的死代码
|
||
|
||
## 步骤 3:生成缺失的测试
|
||
|
||
对于每个覆盖率不足的文件,按以下优先级生成测试:
|
||
|
||
1. **快乐路径** — 使用有效输入的核心功能
|
||
2. **错误处理** — 无效输入、缺失数据、网络故障
|
||
3. **边界情况** — 空数组、null/undefined、边界值(0、-1、MAX\_INT)
|
||
4. **分支覆盖率** — 每个 if/else、switch case、三元运算符
|
||
|
||
### 测试生成规则
|
||
|
||
* 将测试放在源代码旁边:`foo.ts` → `foo.test.ts`(或遵循项目惯例)
|
||
* 使用项目中现有的测试模式(导入风格、断言库、模拟方法)
|
||
* 模拟外部依赖项(数据库、API、文件系统)
|
||
* 每个测试都应该是独立的 — 测试之间没有共享的可变状态
|
||
* 描述性地命名测试:`test_create_user_with_duplicate_email_returns_409`
|
||
|
||
## 步骤 4:验证
|
||
|
||
1. 运行完整的测试套件 — 所有测试必须通过
|
||
2. 重新运行覆盖率 — 验证改进
|
||
3. 如果仍然低于 80%,针对剩余的缺口重复步骤 3
|
||
|
||
## 步骤 5:报告
|
||
|
||
显示前后对比:
|
||
|
||
```
|
||
覆盖率报告
|
||
──────────────────────────────
|
||
文件 变更前 变更后
|
||
src/services/auth.ts 45% 88%
|
||
src/utils/validation.ts 32% 82%
|
||
──────────────────────────────
|
||
总计: 67% 84% ✅
|
||
```
|
||
|
||
## 重点关注领域
|
||
|
||
* 具有复杂分支的函数(高圈复杂度)
|
||
* 错误处理程序和 catch 块
|
||
* 整个代码库中使用的工具函数
|
||
* API 端点处理程序(请求 → 响应流程)
|
||
* 边界情况:null、undefined、空字符串、空数组、零、负数
|