java-unit-test
Installation
SKILL.md
Java 单元测试
面向团队的单元测试规范对齐助手:统一"测什么、测多少、怎么设计、用什么默认"。规范分两部分——A. 设计方法(等价类/边界值/决策表/状态迁移)保证测得全;B. 工程默认值与纪律(断言库/Mock 边界/停止标准)保证每次一样。每条规则含「✗ 错误设计 → ✓ 正确设计」。
三条铁律
- 设计优先于编码:先确定"测哪些用例"(等价类/边界值/决策表/状态),再落成
@Test。禁止上来就写代码、想到哪测到哪——那是"覆盖率的幻觉",不是测试设计。 - 最小充分集:用等价类合并代表"无穷输入",用边界值钉住 off-by-one 高发区;穷尽测试不可能,目标是"用最少的用例覆盖最有代表性的输入"。一个方法的有效用例通常在 3~8 个之间,不是越多越好。
- 栈中立:测试框架跟随项目既有——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 原生,不切换。升级标准可机械执行:是否集合?是否同一逻辑组?两条都不是 → 留在原生逐列断言(失败定位准、加列只改一处)。