代
代码覆盖率提升
作者:鹿Sir开发工具v1
为既有项目快速提升单元测试覆盖率的 AI 技能。铁律:不修改源码、穷举所有分支、最少测试覆盖、工具验证结果。语言无关,适用于任何需要给遗留代码补充单元测试的场景。当用户需要提升代码覆盖率、给遗留代码加测试、补充单元测试、增加测试覆盖率时触发。触发词:覆盖率、单元测试、测试覆盖率、遗留代码测试。
下载量
293
点赞
74
价格
免费
技能文档
--- name: boosting-coverage title: 代码覆盖率提升 category: 开发工具 description: 为既有项目快速提升单元测试覆盖率的 AI 技能。铁律:不修改源码、穷举所有分支、最少测试覆盖、工具验证结果。语言无关,适用于任何需要给遗留代码补充单元测试的场景。当用户需要提升代码覆盖率、给遗留代码加测试、补充单元测试、增加测试覆盖率时触发。触发词:覆盖率、单元测试、测试覆盖率、遗留代码测试。 --- # 代码覆盖率提升 ## 概述 阅读源码 → 映射每个分支 → 编写最少测试覆盖每个分支 → 用覆盖率工具验证。**永远不要修改源码。一个测试可以覆盖同一执行路径上的多个分支。** ## 技能工作流 ### 步骤1:调查并映射分支(暂不编写测试) 扫描项目,按分支密度排序(分支多的优先),阅读完整源码。跳过:POJO、纯委托、空类。对每个方法,列出所有不同的路径: | 模式 | 需要覆盖的路径 | |------|----------------| | `if/else`、三元运算符、`&&`/`||`、提前返回 | true 和 false 两种结果 | | `switch` 有 N 个 case | N+1 条路径(包含 default) | | `for`/`while` 循环 | 0 次、1 次、多次迭代 | | `try/catch` | 成功路径 + 每种异常类型 | ### 步骤2:规划最少的测试用例 按执行路径分组分支——如果多个分支共享同一流程,一个测试可以覆盖它们: ``` process(x): if (x == null) return "empty"; // guard if (x < 0) return "negative"; // early exit return "positive"; // normal ``` → 3 个测试(而不是 6 个):`null`、`-1`、`1`——每个测试激活不同的分支集合。 **目标:用最少的测试用例,实现最大的唯一分支覆盖率。** ### 步骤3:编写测试 - 只 mock I/O 和外部系统——永远不要为了"可测试性"而重构源码 - 通过公共调用方测试私有方法——永远不要增加可见性 - 对相同逻辑不同输入使用参数化测试 - 断言每个分支产生的具体输出(不仅仅是 `assertNotNull`) ### 步骤4:验证并精简 ```bash # 运行覆盖率工具——没有它永远不要说"完成了": mvn test jacoco:report # Java pytest --cov=src --cov-report=term-missing # Python jest --coverage # JS/TS go test -coverprofile=coverage.out && go tool cover -html=coverage.out # Go ``` - 红色/黄色线条 → 添加缺失的测试 - 对每个测试自问:"如果我删除它,是否还有另一个测试覆盖这些分支?"——如果有,删除它。 ## 快速参考 | 情况 | 方法 | |------|------| | 包含逻辑的私有方法 | 通过公共调用方测试(覆盖所有路径) | | Void 方法 | 断言副作用(数据库写入、状态变化) | | 异常路径 | `assertThrows` + 验证消息 | | 深度嵌套的 if | 每个测试深入一层,从最内层开始 | | 带 enum 的 switch | 每个值一个测试 + default | ## 常见错误 - **修改源码** → 永远不要。Mock 或使用反射作为最后手段。 - **过度 mock** → 只 mock I/O。通过真实的调用链测试真实的逻辑。 - **断言不足** → `assertNotNull(result)` 什么都证明不了。断言具体的分支结果。 - **不运行工具就声称有覆盖率** → 始终运行工具。始终。 - **跳过"难以到达"的分支** → 如果无法到达它,将其记录为死代码。 ## 危险信号——停止 - "为了让测试更方便,我就把这个私有方法改成 public 吧" - "让我先重构一下,然后再测试" - "这个分支太难到达了,我就跳过它吧" - 在不知道测试覆盖哪个分支的情况下写测试 **遇到以上任何一种情况都意味着:停下来。重新阅读源码。映射分支。编写测试。**
使用说明
# 代码覆盖率提升 为既有项目快速提升单元测试覆盖率的 AI 技能。不修改源码,用最少测试穷举所有分支,支持 Java/Python/JS/Go 等任意语言。 ## 使用 直接告诉 Agent 你需要提升覆盖率: ``` 帮我提升 src/main/java 下的单元测试覆盖率 ``` ``` 给这个 Python 模块补充单元测试,要求覆盖率超过 80% ``` ## 工作原理 1. 扫描项目代码,按分支密度排序,映射所有执行路径 2. 规划最少测试用例——一个测试覆盖同一流程上的多个分支 3. 编写测试:只 mock I/O,通过公共调用方测试私有方法 4. 运行覆盖率工具验证,删除冗余测试 铁律:永远不修改源码,永远用覆盖率工具验证结果。
支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手