Unit Test Generator
一个 Claude Code Skill,自动化生成 Java 项目的单元测试,并通过 JaCoCo 驱动迭代,直到达到 100% 代码覆盖率。
✨ 功能特性
- 🔄 自动化迭代 --- 自动生成测试 → 执行 → 测量覆盖率 → 分析缺口 → 补充测试,循环直到全部达标
- 📊 JaCoCo 驱动 --- 内置 JaCoCo 0.8.15,使用 CLI 精确测量行/分支/方法/类覆盖率
- 🛡️ 生产代码保护 --- 绝不修改生产代码来提高覆盖率,只通过测试本身达成目标
- ✅ 质量保障 --- 测试必须包含有意义的断言,验证预期行为、异常行为和边界条件
- 🚫 零假设 --- 不允许假设测试通过,不允许假设覆盖率,一切以实际执行和测量为准
📋 覆盖率目标
| 指标 | 目标 |
|---|---|
| 行覆盖率 (Line) | 100% |
| 分支覆盖率 (Branch) | 100% |
| 方法覆盖率 (Method) | 100% |
| 类覆盖率 (Class) | 100% |
🔧 工作流程
text
┌─────────────────┐
│ 生成单元测试 │
└────────┬────────┘
▼
┌─────────────────┐
│ 执行 mvn test │
└────────┬────────┘
▼
┌─────────────────┐
│ 生成 JaCoCo │
│ 覆盖率报告 │
└────────┬────────┘
▼
┌─────────────────┐
│ 分析覆盖率缺口 │
└────────┬────────┘
▼
┌─────────────────┐ ┌──────────────┐
│ 覆盖率是否达标? │──否─▶│ 补充测试用例 │──┐
└────────┬────────┘ └──────────────┘ │
│是 │
▼ │
┌─────────────────┐ │
│ 任务完成 ✅ │ ◀────────────────────┘
└─────────────────┘ 继续迭代
🚀 使用方式
前置条件
| 依赖 | 说明 |
|---|---|
| JDK | 需要 Java 开发环境(运行 javac、mvn、java -jar) |
| Apache Maven | 使用 mvn test 作为测试执行命令 |
| Java 项目 | 目标项目需具备标准 Maven 结构(src/main/java、target/classes) |
安装 Skill
将本项目放置到 Claude Code 的 skills 目录:
bash
# 通常位于
~/.claude/skills/unit-test-generator/unit-test-generator/
触发使用
在 Claude Code 中对任意 Java/Maven 项目使用此 Skill,Claude 将自动:
- 分析项目源代码结构
- 生成全面的单元测试
- 执行
mvn test验证测试通过 - 使用内置 JaCoCo CLI 生成覆盖率报告
- 检查报告,定位未覆盖的代码
- 循环补充测试直到四项覆盖率指标均达到 100%
📁 项目结构
text
unit-test-generator/
├── SKILL.md # Skill 核心规则定义
├── README.md # 项目说明文档
├── LICENSE # MIT 许可证
└── jacoco-0.8.15/ # 内置 JaCoCo 0.8.15 发行版
├── lib/
│ ├── jacococli.jar # CLI 工具(用于生成覆盖率报告)
│ ├── jacocoagent.jar # Java Agent(运行时插桩)
│ └── ...
├── doc/ # API 文档和示例
└── coverage/ # 示例覆盖率报告
⚙️ 核心规则
| 规则 | 说明 |
|---|---|
| 强制执行 | 生成测试后必须实际运行,不允许假设通过 |
| 强制覆盖率验证 | 必须使用 JaCoCo 测量覆盖率,不允许假设 |
| 强制 JaCoCo 来源 | 只能使用内置的 jacoco-0.8.15/,禁止下载其他版本 |
| 强制迭代 | 未达标前禁止停止,必须持续循环 |
| 禁止完成声明 | 存在任何未覆盖的行/分支/方法/类时禁止声称完成 |
| 生产代码保护 | 禁止通过修改生产代码来提高覆盖率 |
| 测试质量 | 测试必须有实际意义,不能只为凑覆盖率 |
📊 实际效果展示
在 CodeWeave 项目上的测试结果:
测试总览
| 指标 | 覆盖率 | 详情 |
|---|---|---|
| 方法覆盖 | 100% (97/97) | ✅ 所有方法均已覆盖 |
| 行覆盖 | 99.9% (1043/1044) | ✅ 仅 1 行未覆盖(死代码) |
| 指令覆盖 | 99.7% (4722/4738) | ✅ |
| 分支覆盖 | 89.8% (176/196) | 未覆盖分支均为死代码/防御性检查 |
- 总测试数: 118 个,全部通过 ✅
- 测试文件: 12 个测试类
各类覆盖详情
| 类 | 方法 | 行 | 指令 | 分支 |
|---|---|---|---|---|
| AnalysisController | 100% | 100% | 100% | 100% |
| AnalysisService | 100% | 100% | 100% | 100% |
| ClassAnalyzer | 100% | 99.5% | 98.8% | 88.2% |
| ClassInfo | 100% | 100% | 100% | 100% |
| ProjectScanner | 100% | 100% | 100% | 95.5% |
| RelationInfo | 100% | 100% | 100% | 100% |
| GraphData | 100% | 100% | 99.6% | 86.4% |
| HtmlGenerator | 100% | 100% | 100% | 100% |
| AnalysisRequest | 100% | 100% | 100% | 100% |
| AnalysisResponse | 100% | 100% | 100% | 100% |
| WebConfig | 100% | 100% | 100% | 100% |
| CodeWeaveApplication | 100% | 100% | 100% | 100% |
生成的测试文件
text
src/test/java/com/codeweave/
├── CodeWeaveApplicationTest.java (2 tests)
├── analyzer/
│ ├── ClassAnalyzerTest.java (53 tests)
│ ├── ClassInfoTest.java (8 tests)
│ ├── ProjectScannerTest.java (10 tests)
│ └── RelationInfoTest.java (2 tests)
├── config/
│ └── WebConfigTest.java (1 test)
├── controller/
│ └── AnalysisControllerTest.java (8 tests)
├── generator/
│ ├── GraphDataTest.java (12 tests)
│ └── HtmlGeneratorTest.java (4 tests)
├── model/
│ ├── AnalysisRequestTest.java (2 tests)
│ └── AnalysisResponseTest.java (2 tests)
└── service/
└── AnalysisServiceTest.java (9 tests)
📜 许可证
MIT License © 2026 Tycoon-HJ
github:项目地址