代码覆盖率提升

作者:鹿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. 运行覆盖率工具验证,删除冗余测试

铁律:永远不修改源码,永远用覆盖率工具验证结果。

如何安装此技能?

访问技能市场,点击「安装」按钮,按提示将技能包放入 AI 编程助手的 skills 目录即可。

浏览技能市场

支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手

代码覆盖率提升 - 免费 | 技能派