JUnit断言错误排查:预期<11>实际<0>,求修复最小整数查找方法
排查JUnit预期值<11>但实际值<0>的问题
我一眼就看出问题出在哪了——你的findSmallestInt方法初始化smallest的方式完全错了!
问题根源
你把smallest初始化为0,这会直接导致两种错误场景:
- 如果数组里的所有元素都大于0(比如你测试用例里的
[11, ...]),0会一直比数组里的元素小,根本不会进入if语句更新值,所以方法最后返回的还是初始的0,这就是你看到预期<11>但实际<0>的核心原因。 - 如果数组里包含负数,偶尔能得到正确结果也只是巧合,逻辑本身是不严谨的。
修复方案
正确的做法是把smallest初始化为数组的第一个元素,这样就能从数组实际存在的数值开始比较,不会引入外部默认值的干扰:
public class SmallestIntegerFinder { public static int findSmallestInt(int[] arrayOfIntegers) { // 初始化 smallest 为数组第一个元素(符合题目数组非空的前提) int smallest = arrayOfIntegers[0]; for(int i = 0; i < arrayOfIntegers.length; i++){ if(smallest > arrayOfIntegers[i]) { smallest = arrayOfIntegers[i]; } } return smallest; } }
要是想让代码更简洁,也可以用增强for循环:
public static int findSmallestInt(int[] arrayOfIntegers) { int smallest = arrayOfIntegers[0]; for(int num : arrayOfIntegers) { if(num < smallest) { smallest = num; } } return smallest; }
验证测试
补全你的JUnit测试用例后,运行就能得到正确结果了:
import org.junit.Test; import static org.junit.Assert.assertEquals; public class SmallestIntegerFinderTest { @Test public void example1(){ // 测试用例:数组最小值为11的场景 int[] testArray = {11, 15, 20}; assertEquals(11, SmallestIntegerFinder.findSmallestInt(testArray)); // 再测一个有更小值的场景验证逻辑 int[] testArray2 = {5, 3, 9, 1}; assertEquals(1, SmallestIntegerFinder.findSmallestInt(testArray2)); } }
内容的提问来源于stack exchange,提问作者Sibnon
相关产品推荐
相关产品推荐

