java基本类型与包装类边界测试需覆盖最小值、最大值、零值、特殊值(nan/无穷大)及空指针风险;须系统验证数值边界、装箱拆箱行为(含缓存陷阱、null拆箱npe)、运算溢出、字符串转换与序列化交互场景。

Java 中基本类型和包装类的边界测试,核心是覆盖每种类型的最小值、最大值、零值(如适用)、特殊值(如 NaN、无穷大)以及装箱/拆箱过程中的空指针风险。不能只测几个常规数字,必须系统性地覆盖数值边界和状态边界。
基本类型数值边界全覆盖
每种基本类型都有明确的取值范围,测试必须包含其 MIN_VALUE、MAX_VALUE、典型中间值(如 0、1、-1)以及溢出临界点附近的值:
-
byte/short/int/long:测
MIN_VALUE、MAX_VALUE、MIN_VALUE + 1、MAX_VALUE - 1、0、1、-1;对 long 还建议加测Integer.MAX_VALUE + 1L等跨整型边界的值 -
char:测
\u0000(0)、\u007F(ASCII 最大)、\u0080(首个非 ASCII)、\uFFFF(最大码位) -
boolean:只含
true和false,二者必须都覆盖 -
float/double:除
MIN_VALUE、MAX_VALUE外,必须包含0.0f/0.0d、-0.0f/-0.0d(注意符号零不等价)、POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN;比较时禁用==,改用Float.equals()或Float.isNaN()
包装类装箱与拆箱行为验证
包装类不是基本类型的简单封装,其缓存机制、空值处理和自动转换逻辑极易引发隐式 bug:
-
缓存范围内的值要测相等性陷阱:例如
Integer a = 127; Integer b = 127; a == b为 true,但a = 128; b = 128;就为 false;需用equals()断言,且对-128 ~ 127(Integer)、0 ~ 127(Character)等缓存区间做显式覆盖 -
null 拆箱必须触发 NPE:对
Integer i = null; int j = i;类操作,应使用assertThrows(NullPointerException.class)验证;任何可能为 null 的包装类参与算术运算、比较或方法调用前,都要测该场景 -
valueOf() 与 new 区别:
new Integer(42)总是新建对象,而Integer.valueOf(42)可能复用缓存;若代码依赖对象身份(如==),必须测两种构造方式的行为差异
边界交互场景:运算、转换、序列化
单独测单个值不够,更要测它们在真实上下文中的反应:
-
算术溢出:如
int x = Integer.MAX_VALUE; int y = x + 1;结果为Integer.MIN_VALUE(静默回绕),需验证业务逻辑是否容忍或应抛异常(可配合Math.addExact()测试异常路径) -
字符串转换边界:用
Integer.parseInt("2147483647")、parseInt("2147483648")(应抛NumberFormatException)、parseInt("-2147483648")、parseInt("")、parseInt(" 123 ")、parseInt("0x1F", 16)等覆盖格式与范围 -
JSON/序列化反序列化:如 Jackson 将
null包装类序列化为null,但反序列化null到基本类型会失败;需测@JsonInclude(JsonInclude.Include.NON_NULL)等配置下 null 值的传递行为
实用测试建议
避免手写大量重复用例,善用工具提升覆盖率和可维护性:
- 用 JUnit 5 的
@ParameterizedTest+@ValueSource或@MethodSource驱动边界值集合,例如统一传入{Byte.MIN_VALUE, -1, 0, 1, Byte.MAX_VALUE} - 对 float/double,用 AssertJ 的
isEqualToComparingOnlyGivenFields()或自定义isCloseTo(double expected, double delta)断言浮点精度 - 静态分析辅助:启用 SpotBugs(检查
NP_NONNULL_RETURN_VIOLATION、ICAST_INTEGER_MULTIPLY_CAST_TO_LONG等)和 NullAway(强制包装类空值检查) - 不依赖 IDE 自动生成的 getter/setter 测试——它们通常跳过 null 和极端值;所有 public 方法的每个参数,只要类型是包装类或基本类型,都应独立覆盖其全部边界
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











