Параметризованный тест JUnit с @MethodSource с методом, который возвращает ArrayList - PullRequest
0 голосов
/ 28 июня 2019

Я хочу реализовать параметризованный тест JUnit для метода, который имеет три входных параметра. Я хочу, чтобы тест проходил через декартово произведение всех возможных комбинаций этих трех входных параметров. Для этого у меня есть метод, который генерирует декартово произведение и сохраняет его в Arraylist. Как я могу получить доступ к отдельным значениям для моего метода тестирования? Я читал о возвращении потока аргументов, но я хочу сгенерировать значения для аргументов, а не записывать их явно.

@ParameterizedTest
@MethodSource("generateCartesianProduct")
public void myTest(int x, int y, int z) {        
    Assertions.assertTrue(methodToTest(
           x, y, z));
}

private static whatToReturnHere?? generateCartesianProduct() {
    int[] x = {1, 2, 3};
    int[] y = {4, 5, 6};
    int[] z = {7, 8, 9};
    ArrayList<Integer> list = new ArrayList<>();
    ArrayList<ArrayList> result = new ArrayList<>();

    for (int i = 0; i < x.length; i++) {
        for (int j = 0; j < y.length; j++) {
            for (int k = 0; k < z.length; k++) {
                list = new ArrayList<>();
                list.add(x[i]);
                list.add(y[j]);
                list.add(z[k]);
                result.add(list);
            }
        }
    }
    return result;
}

1 Ответ

0 голосов
/ 28 июня 2019

Попробуйте следующее и верните org.junit.jupiter.params.provider.Arguments (как подсказывает javadoc @MethodSource.

@ParameterizedTest
@MethodSource("generateCartesianProduct")
public void myTest(final int x, final int y, final int z) {
    System.out.println(x + " " + y + " " + z);
}

private static List<Arguments> generateCartesianProduct() {
    final int[] x = { 1, 2, 3 };
    final int[] y = { 4, 5, 6 };
    final int[] z = { 7, 8, 9 };
    final List<Integer> list = new ArrayList<>();
    final List<Arguments> result = new ArrayList<>();

    for (final int element : x) {
        for (final int element2 : y) {
            for (final int element3 : z) {
                final Object[] values = { element, element2, element3 };
                result.add(() -> values);
            }
        }
    }
    return result;
}

Редактировать: просто вы знаете, что есть функция гуавы для генерации декартового произведения: Lists.cartesianProduct

...