Массив параметризации 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);
    }
}
Другие вопросы по тегам