返回null以外的其他内容

时间:2018-04-12 14:33:25

标签: java junit junit4

这可能是编写代码的一种非常糟糕的方式,但这是一个计算每行总数并将其全部打印在括号中的程序。

public static int[] rowsSums(int[][] array) {
    int[][] numArray = {

                            {3, -1,  4,  0},
                            {5,  9, -2,  6},
                            {5,  3,  7, -8}

                       };
    int rowTotal = 0;
    int row2Total = 0;
    int row3Total = 0;
    for (int i = 0; i < numArray[0].length; i++) {
        rowTotal += numArray[0][i];
        row2Total += numArray[1][i]; 
        row3Total += numArray[2][i];
    }

    System.out.println("(" + rowTotal + "," + row2Total + "," + row3Total + ")");
    return null;

}

没有JUnit的输出是:

  

(6,18,7)

我正在使用JUnit和我的代码对此进行测试:

@Test
public void rowsSums() {

    int [] i = new int [] {6, 18, 7};
    assertEquals(i, Exercise2.rowsSums(numArray));
}

是的,我知道我的输出不应该为null,因为JUnit讨厌它。在不使JUnit失败或吐出错误的情况下,我可以返回什么其他变量?

我必须保留这些

  

public static int [] rowsSums(int [] [] array){

     

int [] [] numArray = {

更新:无论我尝试什么,JUnit总是会出现此错误PrntScrn of Error

6 个答案:

答案 0 :(得分:1)

如果您的方法仅用于打印消息而不返回任何内容,则应将其返回类型声明为javascript:(function() { var pasteText = document.getElementById("mergeFields-input-text").select(); document.execCommand("Paste"); tempAlert("PASTED SUBJECT", 500); function tempAlert(msg, duration) { var el = document.createElement("div"); el.setAttribute("style","position:absolute;top:2%;left:45%;background-color:yellow;"); el.innerHTML = msg; document.body.appendChild(el); setTimeout(function(){ el.parentNode.removeChild(el); }, duration ); } })();

void

然后只需删除public static void rowsSums(int[][] array) { ... 语句。

但是,根据您的测试用例,您似乎想要返回一个包含您计算的值的数组。这些变量可以组合成一个存储总数的数组,然后返回。而不是让三个内部变量保存总数(returnrowTotalrow2Total)。

答案 1 :(得分:1)

要返回包含总和的python -m http.server,您可以

int[]

那是你可以断言的东西

return new int[] { rowTotal, row2Total, row3Total };

请注意,最好将计算和输出分开,即应将assertArrayEquals(i, Exercise2.rowsSums(numArray)); 移动到另一个接受返回数组作为参数的函数。

答案 2 :(得分:0)

我认为您的方法应该返回执行的计算,而不仅仅是打印消息,否则您将无法清楚地测试方法。
除了方法名称应该是动词/动作而不是通用名称 所以sum()会更清楚。

您可以返回方法中每行的sum数组,并在单元测试中断言结果:

public static int[] sum(int[][] array) {
  ...     
    return new int[] {rowTotal,  row2Total, row3Total};
}

在你的测试中:

int[] sumExpected = ...
Assert.assertArrayEquals(sumExpected, Exercise2.sum(numArray));

答案 3 :(得分:0)

int[][] numArray = {

            {3, -1,  4,  0},
            {5,  9, -2,  6},
            {5,  3,  7, -8}

};

public static int[] rowsSums(int[][] array) {

    int[] sum =  new int[array.length];

    for (int i=0;i<sum.length; i++)
        sum[i] = 0;

    for (int i = 0; i < sum.length; i++) {
        for(int j=0; j< array[i].length; j++)
        sum[i] += array[i][j];
    }

    return sum;

}

int[] result = rowsSums(numArray);

答案 4 :(得分:0)

如果您将返回数组,那么您将能够在jUnit测试中使用它并将预期结果与实际值进行比较。

System.out.println("(" + rowTotal + "," + row2Total + "," + row3Total + ")");
int [] result = new int[3];
result[0] = rowTotal;
result[1] = row2Total;
result[2] = row3Total;
return result;

答案 5 :(得分:0)

为什么要将int [] []数组传递给方法,但实际上根本不会对它做任何事情?...我假设你想要使用你传递的数组结构来计算每个它的数组(行)。您也不应该将输出与功能混合在一起。您应该返回String,然后在main方法中打印它。正如@ bill-the-Lizard所说,你想拥有一个数组,其中包含行的值,然后你将返回一个int []数组,其中包含行的计数。然后,您将在当前的循环中有一个for循环,它将计数输入到相应的数组键中。