Junit Testing void二维数组

时间:2014-10-04 00:21:30

标签: java junit multidimensional-array

我刚开始接受测试。

我试图测试的方法没有返回值(void),但它在自己的类中创建了一个静态的2D数组(char [] []),所以据我所知,这就是它的一面效果。

这是一些模拟代码:

public class MyClass{

    public static char[][] table;

    public void setTable(int rows, int columns, int number){
        board = new char[n][m];
        // more code that alters the table in a specific way, 
        // depending on the 3rd parameter
    }

现在进行测试,我正在考虑做类似的事情:

public class SetTableTest{

    @Test
    public void test(){
        MyClass test = new MyClass();
        assertArrayEquals(**********, test.table);
    }
}

我有两个问题:

  1. 我是否允许比较我所做的静态变量(test.table),即。这实际上会返回一个"实例"完成的表格?

  2. 我相当确定2D数组没有assertArrayEquals等价物,所以我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

此处有assertArrayEquals() http://junit.sourceforge.net/javadoc/org/junit/Assert.html

所以你可以使用静态导入:

import static org.junit.Assert.assertArrayEquals;
然而,只有“浅”数组等于,所以你需要实现逻辑本身。还要确保在断言之前调用setTable()。这是:

import static org.junit.Assert.assertArrayEquals;

public class SetTableTest{

    @Test
    public void test() {
        MyClass test = new MyClass();
        int foo = 42;
        int bar = 42;
        int baz = 42;
        test.setTable(foo, bar, baz)
        for (char[] innerArray : test.table) {
             assertArrayEquals(*****, innerArray);
        }
    }
}

答案 1 :(得分:1)

数目:

  1. 是的,静态变量将返回已完成的实例 表格,假设setTable()结尾处设置了 完成了table变量的表格。如果你没有,那么就没有了 正确的实例。

    然而,从设计的角度来看,它会更好 如果您正在设置,则为已完成的表设置一个存取方法,例如getTable() 它是MyClass中的变量,但这是一个不同的问题。

  2. 为了测试是否创建了2D数组,我建议创建一个表示2D数组每一行的数组,例如

    char[] row0 == test.table[0]
    char[] row1 == test.table[1].
    

    您需要自己创建这些数组,其中包含您希望在setTable()创建的表中的值。然后,您可以为每一行使用assertArrayEquals()。示例:

    public class SetTableTest{
    
        @Test
        public void test(){
            MyClass test = new MyClass();
            test.setTable(2, 2, 5);
            char[] row0 = {x, x} // This is whatever you would expect to be in row 0
            char[] row1 = {x, x} // This is whatever you would expect to be in row 1
            assertArrayEquals(row0, test.table[0]);
            assertArrayEquals(row1, test.table[1]);
        }
    }
    

答案 2 :(得分:0)

已经给出了答案,但为了其他用户,我将添加另一种方法。

要比较两个数组double[][] arr1, arr2,可以使用返回Arrays.deepequals(arr1, arr2)true的{​​{1}}。这个功能的签名是:

false

对于单元测试,单行就足够了:

java.util.Arrays.deepEquals(Object[] a1, Object[] a2)