基本类型不能用instanceof,包装类才是可断言对象;assertEquals支持基本类型值比较,包装类需防null并用isInstanceOf等安全判断。

Java 基本类型(如 byte、int、boolean)和其对应包装类(Byte、Integer、Boolean)在单元测试中不能混用断言逻辑,核心在于:**基本类型不是对象,不能参与引用语义的判断;包装类才是可被断言的对象类型**。
断言基本类型值是否相等
直接使用 assertEquals 即可——JUnit 5 的 Assertions.assertEquals 对基本类型做了重载支持,会按值比较:
-
assertEquals(42, calculator.add(20, 22));✅ 安全,int与int比较 -
assertEquals((byte) 5, result);✅ 显式类型一致,避免隐式提升导致误判 - 避免写成
assertEquals(new Byte((byte)5), result)—— 不必要装箱,且易引发空指针或类型不匹配
断言包装类对象是否为预期类型
若待测方法返回的是包装类(如 Byte 或 Integer),且需验证其运行时类型,应使用 assertThat(...).isInstanceOf(...)(AssertJ)或手动判空+类型检查:
-
assertThat(value).isInstanceOf(Byte.class);✅ 清晰、安全,value 是引用类型 -
assertTrue(value instanceof Byte);✅ 仅当 value 非 null 时有效;null 会导致 false,但不报错 -
禁止:
byte b = 10; assertTrue(b instanceof Byte);❌ 编译失败,基本类型不可用instanceof
处理 null 值与边界场景的断言
包装类可能为 null,而基本类型永远非 null。测试中必须覆盖该差异:
立即学习“Java免费学习笔记(深入)”;
- 验证可能返回
null的包装类结果:assertNull(result);或assertThat(result).isNull(); - 验证非 null 并取值:
assertNotNull(result); assertEquals(100, result.intValue()); - 对
Boolean尤其注意:assertTrue(flag)要求flag是非 null 的Boolean.TRUE;若可能为 null,改用assertThat(flag).isTrue();(AssertJ 自动解包并判空)
统一工具类辅助断言(推荐)
当项目频繁处理“基本类型 ↔ 包装类”转换逻辑时,可封装静态工具方法并静态导入,让断言更聚焦业务意图:
- 定义
TestUtils.expectByte((byte) 5)返回非 nullByte实例 - 静态导入后:
assertEquals(TestUtils.expectByte((byte) 5), actualByte); - 好处:屏蔽装箱细节,显式表达测试意图,避免
new Byte(...)这类过时写法


















