编写处理数组的方法的JUnit Test步骤是什么?测试失败求排查
数组处理方法JUnit测试编写步骤及问题修复
一、数组处理方法JUnit测试通用编写步骤
- 明确待测试方法的功能、入参规则、返回值类型和预期输出,不要把业务逻辑直接写在测试方法中,测试方法仅负责调用待测试方法、对比结果。
- 准备多组测试用例,覆盖合法常规入参、边界入参(空数组、单元素数组)、异常场景入参。
- 测试方法内构造入参,调用待测试方法获取实际返回结果。
- 调用JUnit断言方法,对比实际结果和预期结果是否一致。
- 可选:补充异常场景测试,验证方法遇到非法入参时是否抛出符合预期的异常。
二、现有测试代码的问题
- 没有单独封装待测试的数组处理逻辑,直接把打印逻辑写在测试方法中,
System.out.print只会把内容输出到控制台,不会生成字符串返回值供断言对比。 - 断言逻辑完全错误:
assertEquals第一个参数为预期值、第二个为实际值,你写的3!6!7!1!2!4既没有引号包裹为字符串,属于语法错误,同时和int数组array类型完全不匹配,必然运行失败。 - 循环逻辑本身有问题:你写的循环会先输出分隔符再输出元素,最终打印结果为
!3!6!7!1!2!4,和预期的开头无分隔符的结果不符。
三、修复后的代码示例
待测试的业务方法(建议单独封装在工具类中)
public String getArrayString(int[] array, char symbol) { if (array == null || array.length == 0) { return ""; } StringBuilder sb = new StringBuilder(); // 先拼接第一个元素,避免开头出现多余分隔符 sb.append(array[0]); for (int i = 1; i < array.length; i++) { sb.append(symbol).append(array[i]); } // 如果需要带Result前缀,修改为 return "Result: " + sb.toString(); return sb.toString(); }
修复后的测试方法
@Test public void getArrayStringTest() { int[] array = new int[] { 3, 6, 7, 1, 2, 4 }; char symbol = '!'; // 调用待测试方法获取实际返回值 String actualResult = getArrayString(array, symbol); // 预期值用双引号包裹为字符串,和实际返回值对比 assertEquals("3!6!7!1!2!4", actualResult); }
内容的提问来源于stack exchange,提问作者Holay
相关产品推荐
相关产品推荐

