Привет, я делаю модульный тест для алгоритма 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));
}
}




Объявление частного атрибута arrayIn:
private int[] arrayIn[];
эквивалентно:
private int[][] arrayIn;
Итак, присваивая ему значение, вы должны сделать:
this.arrayIn = ...; // without the brackets []
Я не понимаю, почему вы используете параметризованный тест. Параметризованный тест полезен для тестирования множества входов. И у вас только один набор входных данных: массив и длина. Так, например, достаточно одного метода тестирования. И убедитесь, что вы используете правильный метод assert: assertEquals(Object, Object) здесь не адаптирован, вам следует использовать assertArrayEquals(int[], int[]):
public class QuickSortTest {
@Test
public void test_quicksort() {
...
assertArrayEquals(expectedArr, actualArr);
}
}
Спасибо за подсказку по assertArrayEquals - когда я использовал assertEquals, появлялись тарабарщины. Спасибо и за объявление! Теперь это работает! Да, я собирался добавить больше параметров, но поскольку я все еще получаю ошибку для 1-го случая, я просто остановился, чтобы проверить. Я изменил свой код, как показано ниже.
@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);
}