java单元测试断言是自动比对实际结果与预期值的核心手段,junit 5常用assertequals、asserttrue、assertfalse、assertnull、assertnotnull、assertthrows等方法,均支持自定义失败消息以提升可维护性。

Java 单元测试中,断言(Assertion)是验证方法行为是否符合预期的核心手段。它不靠打印日志或手动检查,而是用代码自动比对“实际结果”和“你写的预期值”,不一致就立刻失败并报错,定位快、可重复、适合自动化。
常用断言方法及典型用法
JUnit 5(当前主流版本)提供静态断言方法,需导入:
import static org.junit.jupiter.api.Assertions.*;
-
assertEquals(预期值, 实际值):最常用,用于数值、字符串、对象等内容相等判断。对象比较依赖
equals()方法重写。 -
assertTrue(布尔表达式):验证条件为 true,比如
assertTrue(list.size() > 0)或assertTrue(user.isActive())。 -
assertFalse(布尔表达式):与上相反,常用于检查禁用状态、空校验等,如
assertFalse(string.isEmpty())。 - assertNull(对象) 和 assertNotNull(对象):验证对象是否为空引用,适合检查初始化、查询结果、异常路径返回值等。
-
assertThrows(异常类型.class, 可执行代码):验证某段逻辑是否按预期抛出指定异常,例如
assertThrows(NullPointerException.class, () -> obj.toString())。
带提示消息的写法更实用
所有断言方法都支持添加自定义失败消息,让错误一目了然:
assertEquals(100, account.getBalance(), "余额应为100元")assertTrue(user.isAdult(), "用户年龄应满18岁")assertThrows(IllegalArgumentException.class, () -> service.process(null), "传入null应抛出IAE")
消息不是可有可无的装饰——当测试在CI流水线里失败时,它能省掉你翻代码查“到底哪个 assertEquals 没过”的时间。
注意几个关键细节
- 断言失败会立即终止当前测试方法,后续语句不执行;但不影响其他@Test方法运行。
- JUnit 4 和 JUnit 5 的断言类不同:J4 用
org.junit.Assert,J5 用org.junit.jupiter.api.Assertions,别混用。 - 避免在一个测试方法里堆砌过多断言。重点验证一个逻辑点,必要时拆成多个@Test方法,每个职责清晰。
- 不要用断言替代业务逻辑判断(比如在生产代码里写
assert x != null)。Java 的assert关键字默认关闭,且语义不同——它是开发期调试辅助,不是测试框架断言。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











