您好我正在为QuickSort算法进行单元测试(即将随机数中的随机数按升序排序)。但是我无法在Collection中声明一组数字。你能帮忙吗。谢谢。 此行还有语法错误
this.arrayIn [] = arrayIn;
我是否正确测试
assertEquals(arrayOut,QuickSort.sort(arrayIn));
package week8;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
public class QuickSortTest {
private int[] arrayIn[];
private int length;
private int[] arrayOut[];
public QuickSortTest(int[] arrayIn, int length, int[] arrayOut) {
this.arrayIn[]= arrayIn;
this.length=length;
this.arrayOut[]=arrayOut;
}
@Parameters
public static Collection<Object[]> parameters(){
return Arrays.asList(new Object[][]{
{{1,4,6,3,5,4},6,{1,3,4,4,5,6}}
});
}
@Test
public void test_quicksort() {
assertEquals(arrayOut, QuickSort.sort(arrayIn));
}
}
答案 0 :(得分:0)
私有属性arrayIn
的声明:
private int[] arrayIn[];
相当于:
private int[][] arrayIn;
因此,在为其分配值时,您应该:
this.arrayIn = ...; // without the brackets []
我不明白你为什么要使用参数化测试。参数化测试对于测试多个输入集非常有用。而且你只有一个输入集:一个数组和一个长度。因此,例如,使用一种测试方法就足够了。并确保使用正确的断言方法:assertEquals(Object, Object)
不适用于此处,您应该使用assertArrayEquals(int[], int[])
:
public class QuickSortTest {
@Test
public void test_quicksort() {
...
assertArrayEquals(expectedArr, actualArr);
}
}
答案 1 :(得分:0)
感谢assertArrayEquals上的提示 - 当我使用assertEquals时,得到了乱码。 谢谢你的宣言!它现在有效! 是的我打算添加更多参数,但由于我的第一种情况仍然出现错误,我只是停下来检查。我修改了我的代码如下。
@Parameters
public static Collection<Object[]> parameters(){
return Arrays.asList(new Object[][]{
{new int[] {1,4,1,6,3,5}, 6, new int[] {1,1,3,4,5,6}},
{new int[] {1,4,1,6,3,5}, 6, new int[] {1,3,1,4,5,6}},
{new int[] {70000,4,1,6,3,5}, 7, new int[] {1,3,4,5,6,70000}},
});
}
@Test
public void test_quicksort() {
new QuickSort().sort(arrayIn);
assertArrayEquals(arrayOut, arrayIn);
}