使用assertArrayEquals使用JUnit进行测试时出错

时间:2018-04-12 13:03:00

标签: java testing junit junit4

测试这段代码时:

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测试它,以便它没有错误或错误?

3 个答案:

答案 0 :(得分:3)

我是一个int数组,而Exercise2.maxRowAbsSum(numArray)返回int。 比较它们是不可能的,因此也就是错误。

答案 1 :(得分:1)

您正在尝试将intint[])数组与从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。