JUnit 5 断言是什么
JUnit 5 断言集中在 org.junit.jupiter.api.Assertions:assertEquals、assertTrue、assertThrows、assertAll 等。assertAll 会执行完所有分组断言再汇总报告,减少「修一个跑一次」的往返;Java 项目也常搭配 AssertJ 使用链式断言,集合比较与失败信息更直观。
基本信息
| 来源包 | org.junit.jupiter.api.Assertions |
|---|---|
| 常用方法 | assertEquals、assertTrue 与 assertFalse、assertNull、assertThrows、assertAll |
| 异常断言 | assertThrows 返回异常对象,可继续断言消息 |
| 组合断言 | assertAll 全部执行后汇总失败,不中途停止 |
| 生态搭配 | AssertJ 链式断言,集合与失败信息更直观 |
断言示例
断言示例
// 基本断言:期望值在前,实际值在后
assertEquals(2, calc.add(1, 1));
// 异常断言:返回值可继续校验消息
var ex = assertThrows(IllegalArgumentException.class, () -> parse("x"));
assertEquals("bad input", ex.getMessage());
// 组合断言:全部执行后汇总报告
assertAll("user",
() -> assertEquals("alice", user.name()),
() -> assertTrue(user.active()));典型使用场景
- 单元测试:返回值、状态与异常路径的标准断言。
- 多字段校验:assertAll 一次性核对对象多个属性。
- 异常契约:断言异常类型与错误消息两个要素。
- 迁移旧代码:从 JUnit 4 迁移时对应断言方法基本同名。
- 与参数化结合:每个数据组独立报告失败。
- CI 报告:失败消息直接给出期望与实际值,定位快。
补充能力
| 能力 | 方法 | 说明 |
|---|---|---|
| 浮点容差 | assertEquals(delta) | 避免精度误差误报 |
| 前置跳过 | assumeTrue | 条件不满足时跳过 |
| 超时断言 | assertTimeout | 限定代码块执行时长 |
写法与失败信息
| 写法 | 失败信息 | 建议 |
|---|---|---|
| assertEquals(期望, 实际) | 显示两侧值 | 参数顺序别写反 |
| assertTrue(a.equals(b)) | 只报 false | 改用 assertEquals |
| assertThrows | 返回异常对象 | 继续断言消息与原因 |
断言消息里写明业务上下文(订单号、用例目的),CI 上排错不必翻代码。
超时断言防挂死:assertTimeout 适合验证接口与后台任务的最长执行时间,避免套件被单条用例拖住。
assertAll 适合「同一对象的多项校验」,但分组要克制:太多无关断言混在一组,报告噪音大。
迁移时统一 import 来源:同一文件混用两代断言类,行为差异容易被评审看漏。