java-coverage
Skill8 starsChanged 16 days agoApache-2.0View on GitHub
提升 Java 测试覆盖率至行覆盖 80% 以上或分支覆盖 60% 以上,包含集成测试、MockMvc 与覆盖率优化策略。适用于覆盖率不达标、补充测试、生成覆盖率报告的场景。
In this repository32 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ast-grep-blockSkill
- code-deconstructSkill
- code-detect-dupSkill
- code-detect-problemSkill
- code-part-modificationSkill
- code-refactorSkill
- code-reviewSkill
- cpp-checkSkill
- cpp-clang-tidySkill
- cpp-tscancodeSkill
- full-analysisSkill
- gdb-heap-analysisSkill
- java-asprofSkill
- java-check-pmdSkill
- java-check-spotbugsSkill
- java-envSkill
- java-g2mSkill
- jmh-benchSkill
- lets-loopSkill
- long-term-taskSkill
- md2pdfSkill
- merge-agents-mdSkill
- qualitative-assessmentSkill
- requirement-collectSkill
- rust-clippySkill
- rust-flamegraphSkill
- shell-checkSkill
- sql-extractSkill
- sync-dev-specSkill
- sync-repo-docsSkill
- vbox-test-envSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Use this skill when the user:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Java 测试覆盖率提升
目标: 将测试覆盖率提升至行覆盖率>80%或分支覆盖率>60%;增量测试只需将测试内容覆盖率提升至目标值。
适用范围
本技能面向采用固化文件工作流的项目:以 MEMORY.md 记录测试框架与模块信息,以 docs/test-*.md 保存模板与缓存。目标项目没有这些文件时,先按 templates/init-flow.md 初始化;仅在临时排查时可跳过固化文件,按通用流程执行并在报告中注明。
When to Use This Skill
Use this skill when the user:
- 对当前增量代码进行单元测试
- 对当前项目代码进行单元测试
- 生成增量/全量单元测试报告、增量/全量覆盖率报告
强制要求
- 不允许修改源项目的文件
- 增量源文件 100% 覆盖(见 templates/coverage-checklist-table.md)
- 生成可重复执行的脚本文件(见 templates/run-tests-script.md)
约束条件
在应用任何单元测试更改之前,确保项目能够编译。如果编译失败,请立即停止——在问题解决之前不要继续。应用改进后,运行完整验证。
测试编写要点
本技能不依赖外部测试技能,以下要点直接内联执行。
单元测试
- 使用 JUnit 5 注解(
@Test、@BeforeEach、@ParameterizedTest)、AssertJ 断言,按 Given-When-Then 组织用例 - 参数化测试使用
@ValueSource、@CsvSource、@MethodSource - Mockito 使用
@Mock、@InjectMocks、when、verify,只 mock 外部依赖,不 mock 被测类内部实现 - 边界条件参考 RIGHT-BICEP 与 CORRECT,覆盖空值、非法输入、循环边界与异常路径
Spring Boot 集成测试
- Controller:
@WebMvcTest+ MockMvc,覆盖认证与权限分支 - Service:
@SpringBootTest+@MockBean+ 事务回滚 - Repository:
@DataJpaTest+TestEntityManager
固化数据优先读取
执行任何步骤前,先读取以下固化文件(存在则读,缺失按「适用范围」的初始化规则处理),避免重复探索:
| 文件 | 用途 |
MEMORY.md | 项目基本信息、测试框架版本、模块结构、用户偏好 |
docs/test-framework-cache.md | 测试依赖版本、模块路径、pom-test.xml差异化字段 |
docs/test-code-templates.md | 各层测试代码模板(枚举/Domain/Service/工具类) |
docs/pom-test-xml-template.md | pom-test.xml 生成模板 |
docs/html-report-template.md | HTML 报告样式和组件清单 |
references/error-guide.md | 已知错误知识库(编译/运行时问题及修复方案) |
初始化规则:如果 MEMORY.md 已存在且包含测试框架信息 → 跳过初始化,直接读取全部固化文件后进入增量分析。如果不存在 → 执行初始化流程(见 templates/init-flow.md)。
执行流程
步骤一:确认分析类型
当用户提出问题时,需要明确:
- 该项目是 Java/C/Python 语言(已固化到 MEMORY.md,优先读取)
- 是增量分析还是全量分析
- 如果是增量分析,获取差异数据
差异数据获取
| 检测项 | 方法 | 命令 |
| SVN | 项目根目录下存在 .svn/ 目录 | svn diff 或 svn diff -r 版本1:版本2 |
| Git | 项目根目录下存在 .git/ 目录 | git diff 或 git diff 基线分支...HEAD |
停止条件:当无法获取差异数据时,提示用户提供 diff 数据文件路径、版本范围或基线分支名。
步骤二:挑选测试框架
(已固化,优先从 MEMORY.md 读取)
- C 项目:Unity (嵌入式) / Check (通用)
- Java 项目:JUnit5 + Mockito + AssertJ
- Python 项目:pytest
注意:如果固化文件中已有测试框架信息,直接使用,不重新分析 pom.xml。
步骤三:增量执行流程
禁止进入 brainstorming 流程。用户提出增量测试需求时,直接按以下标准流程执行。
3.1 diff 分析与源文件读取(并行化)
- Step A [并行]: Agent A 解析 diff 输出变更清单;Agent B 检查各模块是否已有 pom-test.xml
- Step B [并行]: 每个 Agent 读取一个模块的变更源文件,不超过5个并行
Agent 输出约束:每个源文件只返回类签名、依赖注入列表、新增/变更方法的签名和核心逻辑(10~30行)。单个 Agent 返回总量控制在 200 行以内。
3.2 知识库预防性学习(测试编写前,强制)
在编写任何测试文件之前,必须先读取以下两个文件:
MEMORY.md:重点关注"踩坑速查索引"和"关键类包路径"references/error-guide.md:扫描所有问题标题,提取与当前测试类型相关的预防规则
输出格式:读完后输出简表,表明已掌握的规则。
3.3 测试文件编写(同步统计)
编写测试文件时,同步维护统计数据,避免最后再扫描一遍。创建每个测试文件时,立即记录:file、module、testCount、paramTestCount、nestedCount、coversSource、coversMethods。
3.4 pom-test.xml 创建(模板化)
检查目标模块是否已有 pom-test.xml:
- 已有 → 跳过,直接使用
- 未有 → 从
docs/pom-test-xml-template.md读取模板,填入差异化字段
3.5 编译执行与错误知识沉淀
在测试文件编写完成后,进入编译执行阶段(mvnd test)。此阶段遇到的所有编译错误、运行时异常及其修复方案,必须记录到错误知识库中。
修复前知识库匹配(强制):每次遇到编译错误或测试失败后,在动手修复之前,必须先读取 references/error-guide.md,用错误信息匹配已有问题。如果匹配到,直接按知识库中的解决方案修复,不需要重新探索。详见 templates/error-knowledge-record.md。
3.6 HTML 报告生成
从 docs/html-report-template.md 获取报告组件和样式,填充动态数据直接生成 HTML。不生成 MD 格式报告,不经过 MD→HTML 转换步骤。
测试编写流程
- 遍历目标包下的源文件,梳理类职责、公开方法与依赖。
- 以 public 方法为主要目标,识别正常路径、边界条件与异常路径。
- 外部依赖使用 Mockito 隔离,保证测试可独立执行;涉及数据库时优先在 test scope 引入 H2。
- 生成测试类,命名
{被测类}Test,写入src/test/java对应 package;需要套件时生成AllTests或沿用项目既有套件。 - 执行
mvnd test或mvnd test -Dtest=XxxTest验证。 - 覆盖率报告输出到
target/site/jacoco/index.html(已配置 JaCoCo 时)。
编写原则:覆盖正常、边界、异常三类路径,不以行数覆盖代替分支覆盖;测试可重复执行、不依赖执行顺序与外部环境;断言聚焦行为与结果;不修改生产代码迁就测试。
完成标准:目标类 public 方法均有测试;三类路径均有覆盖;测试可独立重复执行;mvnd test 全部通过;覆盖率数据已生成并记录。
核心策略
策略零:测试类型自动分类
在编写测试前,必须先对每个源方法进行分类判定。分类结果决定使用哪种测试模板。详见 templates/method-classification-matrix.md。
策略一:分层测试覆盖
| 层级 | 测试类型 | 覆盖重点 | 工具 |
| Service(简单) | 单元测试 | 业务逻辑 | Mockito + @ExtendWith |
| Service(复杂) | 集成测试 | 业务逻辑+依赖链 | PowerMock / 深度Mock链路 |
| Domain | 单元测试 | POJO属性 | JUnit 5 |
策略二:优先级排序
- 高价值代码优先 - 核心业务逻辑、复杂算法
- 分支密集代码 - 多条件判断、循环
- 公共API - Controller端点
- 工具类 - 静态方法、工具函数
AST 辅助定位(ast-grep-mcp 联动)
当 ast-grep-mcp 可用时,可快速定位未覆盖的方法签名:
find_code(pattern: 'public $RET $METHOD($$$ARGS) { $$$BODY }', language: java, project_folder: "<dir>")定位 Controller 端点(公共 API 优先):
find_code_by_rule(
project_folder: "<dir>",
yaml: '''
id: controller-endpoint
language: java
rule:
pattern: '@$ANNOTATION($PATH)'
constraints:
ANNOTATION:
regex: '(?i)(GetMapping|PostMapping|PutMapping|DeleteMapping|RequestMapping)'
'''
)编译执行效率优化
详见 templates/build-optimization.md,包括:
- 增量构建策略(省 40%/次)
- 无依赖模块并行构建(省 30-40% 总时间)
- JaCoCo 延迟到最终报告(省 ~10s/模块)
- 预编译分离策略(大型项目适用)
报告生成要求
强制要求:完成单元测试后,必须生成 HTML 格式的单元测试报告和覆盖率报告。不允许使用 Markdown 格式替代 HTML 报告。
报告结构规范、样式规范、输出路径和生成步骤详见 assets/html-report-template.md。
覆盖率检查清单
见 templates/coverage-checklist.md。
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

