测试这段代码时:
public static int maxRowAbsSum(int[][] array) {
int[][] maxRowValue = {
{3, -1, 4, 0},
{5, 9, -2, 6},
{5, 3, 7, -8}
};
int maxRow = 0;
int indexofMaxRow = 0;
for (int row = 0; row < maxRowValue.length; row++) {
int totalOfRow = 0;
for (int column = 0; column < maxRowValue[row].length; column++){
if (maxRowValue[row][column] > 0) {
totalOfRow += maxRowValue[row][column];
} else {
totalOfRow -= maxRowValue[row][column];
}
}
if (totalOfRow > maxRow) {
maxRow = totalOfRow;
indexofMaxRow = row;
}
}
System.out.println("Row " + indexofMaxRow + " has the sum of " + maxRow);
return indexofMaxRow;
}
使用此JUnit代码:
@Test
public void maxRowAbsSum() {
int [] i = new int [] {};
assertArrayEquals(i, Exercise2.maxRowAbsSum(numArray));
}
这突出了红色的assertArrayEquals说:
Assert类型中的方法assertArrayEquals(int [],int [])不适用于参数(int [],int)
我写错了吗?如何使用JUnit测试它,以便它没有错误或错误?
答案 0 :(得分:3)
我是一个int数组,而Exercise2.maxRowAbsSum(numArray)返回int。 比较它们是不可能的,因此也就是错误。
答案 1 :(得分:1)
您正在尝试将int
(int[]
)数组与从int
方法返回的单个maxRowAbsSum()
进行比较。这不起作用,它将苹果与橙子进行比较,JUnit用它的方法签名来保护你。
您应该编写测试以匹配maxRowAbsSum()
方法返回类型,例如:
@Test
public void shouldCalculateMaxRowAbsSum() {
int expected = 3; // example value, change to match your test scenario
assertEquals(expected, Exercise2.maxRowAbsSum(numArray));
}
答案 2 :(得分:1)
我修复了我的代码,但仍然使用了Karol的例子:
而不是只返回具有最大值的行的索引的return indexOfMaxRow
,而是将其更改为return maxRow
,返回23而不是JUnit期望的2。