junit 5断言核心是org.junit.jupiter.api.assertions类的静态方法,用于验证代码行为是否符合预期,包括assertequals、asserttrue、assertnull、assertthrows、asserttimeout、assertall等,支持消息参数和lambda延迟求值,语义清晰、错误提示友好。

JUnit 5 的断言(Assertions)是写单元测试最核心的工具,用来验证代码行为是否符合预期。它不再依赖静态导入旧版 JUnit 4 的 Assert 类,而是统一通过 org.junit.jupiter.api.Assertions 提供的一组静态方法实现,语义更清晰、API 更丰富、错误提示更友好。
常用断言方法及用法
所有断言方法都定义在 Assertions 类中,通常以静态导入方式使用:
常见断言包括:
-
assertEquals(expected, actual):判断两个值是否相等(支持基本类型、字符串、对象等;对浮点数建议用带 delta 的重载) -
assertTrue(condition)/assertFalse(condition):验证布尔表达式结果 -
assertNull(object)/assertNotNull(object):检查对象是否为null -
assertSame(expected, actual)/assertNotSame(expected, actual):验证是否为同一引用(即==) -
assertThrows(Class extends Throwable>, Executable):验证某段代码是否抛出指定异常(推荐替代@Test(expected = ...)) -
assertTimeout(Duration, Executable):验证代码是否在指定时间内完成
带消息和 lambda 的增强写法
每个断言方法都支持可选的失败消息参数,可以是字符串或 Supplier(延迟求值,避免无谓构造):
assertEquals(42, result, "计算结果应为 42");-
assertTrue(isValid, () -> "用户 " + user.getId() + " 未通过校验");(仅当失败时才执行 lambda)
这种写法让失败日志更具体,尤其在 CI 环境中排查更快。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
组合断言与分组验证(assertAll)
当需要一次性验证多个独立条件(且希望全部失败信息都显示出来),用 assertAll:
-
assertAll("user",
() -> assertNotNull(user.getName()),
() -> assertTrue(user.getAge() > 0),
() -> assertEquals("active", user.getStatus()));
它会收集所有断言的失败结果,最后统一抛出一个 AssertionError,包含全部不通过项,避免“失败即中断”的问题。
自定义断言逻辑(using assertDoesNotThrow / assertLinesMatch)
JUnit 5.7+ 新增了更多实用方法:
-
assertDoesNotThrow(() -> riskyMethod()):确保某段代码不抛异常(比try-catch更简洁) -
assertLinesMatch(List<string> expected, List<string> actual)</string></string>:按行比对多行文本(支持正则占位符如[0-9]+) -
assertIterableEquals(expected, actual):深度比较两个Iterable(顺序敏感,内容一致即可)
这些方法减少了手写循环或转换的样板代码,提升可读性和健壮性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










