Массив параметризации Java-теста
Привет я делаю модульный тест для алгоритма 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));
}
}
2 ответа
Спасибо за совет по 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);
}
Объявление частного атрибута 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);
}
}