边界条件测试是单元测试主干,需明确输入输出合法范围,按空/极小结构、索引端点、数值极值、特殊内容、内部结构五类构造用例,并用断言覆盖正常返回、异常抛出及性能超时。

边界条件测试不是“补充项”,而是单元测试的主干。它直接验证代码在临界点是否健壮,比如数组首尾、空输入、极值、循环次数临界点等——这些地方最容易出错,也最常被忽略。
明确输入输出的合法范围
先看方法签名和业务逻辑,找出所有隐含或显式的约束。比如一个计算子数组和的方法,参数是 int[] arr, int left, int right,那就要关注:
- left 和 right 是否要求 0 ≤ left ≤ right
- arr 为 null 或长度为 0 是否允许
- left == right(单元素)、left == 0、right == arr.length - 1(边界索引)是否覆盖
按五类典型边界构造用例
不用凭感觉写,套用边界值分析法,每类至少写 1–2 个用例:
-
空/极小结构:空数组
new int[0]、null 数组、单元素数组{42} -
索引端点:对长度为 5 的数组,测
(0,0)、(0,4)、(4,4)、(-1,0)(非法)、(0,5)(越界) -
数值极值:传入
Integer.MAX_VALUE、Integer.MIN_VALUE、两数相加可能溢出的组合 - 特殊内容:全零数组、全负数、正负混合、含重复值的有序数组
- 内部结构边界:若方法内部用 ArrayList,测 size() = 0、1、capacity 边界(如 add 后刚好扩容)
用断言覆盖行为与异常
边界测试不只是“跑通”,要明确预期结果类型:
- 正常返回值:用
assertEquals校验结果,例如空数组查询应返回 0 - 非法输入应抛异常:用
@Test(expected = IllegalArgumentException.class)或assertThrows(JUnit 5)捕获并验证异常消息 - 性能边界:对耗时操作加
@Test(timeout = 100),防止死循环卡住 CI
避免遗漏的实用技巧
写完别急着提交,快速自查三件事:
- 每个 if/else 分支、每个 for 循环的起始/终止条件,是否都有对应测试?
- 文档或注释里写的“该方法不接受 null”——你真测了 null 吗?
- 上次修改代码时,有没有新增分支或判断?那个新分支的边界是否覆盖?
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











