跳转至

测试覆盖率

分析测试覆盖率,识别差距,并生成缺失的测试以达到 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
使用 JaCoCo 的 pom.xml mvn test jacoco:report
go.mod go test -coverprofile=coverage.out ./...

第 2 步:分析覆盖率报告

  1. 运行覆盖率命令
  2. 解析输出(JSON 摘要或终端输出)
  3. 将低于 80% 的文件按从低到高排序并列出
  4. 对于每个覆盖率未达标的文件,识别以下内容:
  5. 未测试的函数或方法
  6. 缺失的分支覆盖率(if/else、switch、错误路径)
  7. 拉高分母的死代码

第 3 步:生成缺失的测试

对于每个覆盖率未达标的文件,按以下优先级生成测试:

  1. Happy path — 使用有效输入的核心功能
  2. 错误处理 — 无效输入、缺失数据、网络失败
  3. 边界情况 — 空数组、null/undefined、边界值(0、-1、MAX_INT)
  4. 分支覆盖率 — 每个 if/else、switch case、三元运算符

测试生成规则

  • 将测试放在源文件旁边:foo.ts → foo.test.ts(或遵循项目约定)
  • 使用项目现有的测试模式(import 风格、断言库、mock 方式)
  • 对外部依赖进行 mock 处理(数据库、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%  PASS:

重点领域

  • 具有复杂分支的函数(高圈复杂度)
  • 错误处理器与 catch 块
  • 在整个代码库中使用的工具函数
  • API 端点处理器(请求 → 响应流程)
  • 边界情况:null、undefined、空字符串、空数组、0、负数

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC