完美自动生成单元测试SKILL

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 开发环境(运行 javacmvnjava -jar
Apache Maven 使用 mvn test 作为测试执行命令
Java 项目 目标项目需具备标准 Maven 结构(src/main/javatarget/classes

安装 Skill

将本项目放置到 Claude Code 的 skills 目录:

bash 复制代码
# 通常位于
~/.claude/skills/unit-test-generator/unit-test-generator/

触发使用

在 Claude Code 中对任意 Java/Maven 项目使用此 Skill,Claude 将自动:

  1. 分析项目源代码结构
  2. 生成全面的单元测试
  3. 执行 mvn test 验证测试通过
  4. 使用内置 JaCoCo CLI 生成覆盖率报告
  5. 检查报告,定位未覆盖的代码
  6. 循环补充测试直到四项覆盖率指标均达到 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:项目地址

相关推荐
许彰午12 天前
39_Java单元测试JUnit入门
java·junit·单元测试
果子耶耶13 天前
让大模型帮我写单元测试,5个模型的覆盖率和边界处理能力实测
chatgpt·单元测试
川石课堂软件测试14 天前
APP自动化测试|高级手势操作&toast操作
css·功能测试·测试工具·microsoft·fiddler·单元测试·harmonyos
周杰伦fans15 天前
记一次 Visual Studio 突然报错“未能加载 Microsoft.Internal.VisualStudio.Interop”的奇葩经历
microsoft·log4j·visual studio
laplaya15 天前
C++大型项目组件通信与依赖管理实践
c++·log4j·apache
福大大架构师每日一题15 天前
ollama v0.30.7 正式发布:Hermes 桌面端落地,接口、文档、底层依赖全方位优化
golang·log4j
Thecozzy16 天前
单元测试 vs 手工测试:以水印功能为例
单元测试
四问四不知16 天前
Understand Anything的初步了解
log4j
HLAIA光子17 天前
AI Coding框架,打好TDD和SDD这两拳
单元测试·ai编程·代码规范