← ClaudeAtlas

java-unit-testlisted

Java 单元测试**规范对齐**助手。在编写、评审、补全单元测试时使用本技能—— 无论用户是否提到具体框架(unit test / JUnit / Mockito / 测试用例 / 怎么测 / 测哪些 / 写多少测试)。 核心:统一团队的测试规范——用同一套设计方法(等价类/边界值/决策表/状态迁移)、 同一套默认(JUnit 5 原生断言、四维度必检)、同一套"写多少"的停止标准, 让不同人/不同对话产出的测试质量一致、可溯源、可审计,而非每次碰运气。 覆盖:一个方法必测的四维度(正向/反向/边界/异常)、最小充分集、 覆盖率反向校验、测试命名与组织、Mock 边界、"写多少"的成本收益判定。 次级触发信号:只写 happy path、补测试不知道写几个、手写一堆重复 @Test、 多条件分支只测一两种、有状态对象只测正常流转、@MockBean 用于纯单测、 不确定测试该写到什么程度。 工具默认:断言默认用 JUnit 5 原生 Assertions,仅在集合内容断言/字段分组断言(同一逻辑组)时升级到 AssertJ; Spring Boot 项目走 spring-boot-starter-test(自带 JUnit5+Mockito)。 不适用:集成测试/E2E/冒烟测试(@SpringBootTest 全量上下文 / Testcontainers / REST Assured / WireMock)→ java-integration-test; 性能测试、前端测试。
BaixuanZhu/skills · ★ 0 · Testing & QA · score 78
Install: claude install-skill BaixuanZhu/skills
# Java 单元测试 面向团队的**单元测试规范对齐助手**:统一"测什么、测多少、怎么设计、用什么默认"。规范分两部分——**A. 设计方法**(等价类/边界值/决策表/状态迁移)保证测得全;**B. 工程默认值与纪律**(断言库/Mock 边界/停止标准)保证每次一样。每条规则含「✗ 错误设计 → ✓ 正确设计」。 ## 三条铁律 1. **设计优先于编码**:先确定"测哪些用例"(等价类/边界值/决策表/状态),再落成 `@Test`。禁止上来就写代码、想到哪测到哪——那是"覆盖率的幻觉",不是测试设计。 2. **最小充分集**:用等价类合并代表"无穷输入",用边界值钉住 off-by-one 高发区;**穷尽测试不可能**,目标是"用最少的用例覆盖最有代表性的输入"。一个方法的有效用例通常在 3~8 个之间,不是越多越好。 3. **栈中立**:测试框架**跟随项目既有**——JUnit 4 还是 5、Spring Boot 还是非 Spring,按项目现状走,不强加、不主动迁移。断言库默认见下方"断言库策略"。 ## 断言库策略 **默认用 JUnit 原生 `Assertions`(`assertEquals`/`assertThrows`/`assertTrue` 等)。仅当满足以下任一条件时,升级到 AssertJ:** - **集合内容断言**(���言 list 元素构成/顺序/提取字段)—— AssertJ 的 `containsExactlyInAnyOrder` / `extracting(...)`。 - **字段分组断言**(同一逻辑组的多个字段作为一个整体校验,如坐标 x/y/z、时间窗 start/end)—— AssertJ 的 `extracting(...).containsExactly(...)`。 **其余场景(简单值、抛异常、各列语义独立的逐列断言如表格型 VO)一律 JUnit 原生,不切换。升级标准可机械执行:是否集合?是否同一逻辑组?两条都不是 → 留在原生逐列断言(失败定位准、加列只改一处)。** - Spring 项目 `spring-boot-starter-test` 已传递 AssertJ,触发条件时直接用;非 Spring 项目首次触发时按 `references/06` §1 引入 `assertj-core`。 - 既有代码已用 AssertJ 的不主动改写;新测试默认 JUnit 原生,触发条件时该测试用 AssertJ,同文件内可混用。 ## 快速入门(第一次用,按这条线走) | 你想做的 | 看这份 | 读多少 | |---|---|---| | 不知道测什么 / 测多少 | `references/01` 四维度 + 「DoD 锚点」三停止信号 | 各前 30 行 | | 写纯计算/校验方法测试 | `references/02` | 通读(有完整范例) | | 写多条件组合 / 状态机测试 | `references/03` / `references/04` | 通读 | | 设计好的用例怎么落代码 / Mock 怎么写 | `references/06` | 按需查 | > `01` 根文件(设计前必读);`05` 回答"测到什么程度算够"(含遗留代码补测、覆盖率反向校验);`06` 工具落地。 ## 第 0 步:探测被测对象(激活时先执行) 读被测方法/类,一次性判断(读不到则问用户,勿分多轮): 1. **工具栈**:是否 Sp