Можно ли передавать многомерные массивы через @MethodSource (junit 5.1)? - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь передать двумерные массивы в параметризованный тест. Одномерный массив работает, как и ожидалось, но junit жалуется на второе с «Ошибка разрешения параметра с индексом 0». Это не поддерживается или я использую неправильный синтаксис?

(junit 5.1.0)

// This is ok
static Stream<int[]> arrayStream1(){
    return Stream.of( new int[] {1}, new int[] {2});
}

@ParameterizedTest
@MethodSource("arrayStream1")
void test1(int[] par) {
    assertTrue(true);
}

// This is not
static Stream<int[][]> arrayStream2(){
    return Stream.of( new int[][] {{1,2}}, new int[][] {{2,3}});
}

@ParameterizedTest
@MethodSource("arrayStream2")
void test2(int[][] par) {
    assertTrue(true);
}   

1 Ответ

0 голосов
/ 04 ноября 2018

Начиная с JUnit Jupiter 5.3.1 это не поддерживается.

Чтобы узнать, что команда JUnit делает в этом отношении, см. Соответствующий выпуск GitHub .

Однако оба следующих обходных пути помогут вам на данный момент достичь своей цели.

Обтекание объекта [] :

static Stream<Object[]> arrayStream3() {
    return Stream.of(new Object[] { new int[][] { { 1, 2 } } }, new Object[] { new int[][] { { 2, 3 } } });
}

@ParameterizedTest
@MethodSource("arrayStream3")
void test3(int[][] par) {
    System.err.println(Arrays.deepToString(par));
}

Упаковка в аргументах :

static Stream<Arguments> arrayStream4() {
    return Stream.of(arguments((Object) new int[][] { { 1, 2 } }), arguments((Object) new int[][] { { 2, 3 } }));
}

@ParameterizedTest
@MethodSource("arrayStream4")
void test4(int[][] par) {
    System.err.println(Arrays.deepToString(par));
}
...