我刚开始接受测试。
我试图测试的方法没有返回值(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);
}
}
我有两个问题:
我是否允许比较我所做的静态变量(test.table
),即。这实际上会返回一个"实例"完成的表格?
我相当确定2D数组没有assertArrayEquals
等价物,所以我该怎么做呢?
答案 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)
数目:
是的,静态变量将返回已完成的实例
表格,假设在setTable()
结尾处设置了
完成了table
变量的表格。如果你没有,那么就没有了
正确的实例。
然而,从设计的角度来看,它会更好
如果您正在设置,则为已完成的表设置一个存取方法,例如getTable()
它是MyClass
中的变量,但这是一个不同的问题。
为了测试是否创建了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)