可以通过@MethodSource(junit 5.1)传递多维数组吗?

时间:2018-11-03 17:50:38

标签: java testing junit junit5 parameterized-unit-test

我正在尝试将二维数组传递给参数化测试。一维数组按预期工作,但是junit在第二个数组上抱怨“索引处的错误解析参数错误”。这是不支持的,还是我使用了错误的语法?

(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 :(得分:0)

从JUnit Jupiter 5.3.1开始,这不受支持。

要了解JUnit团队在这方面的工作,请参阅相应的GitHub issue

但是,以下两个变通办法都将帮助您暂时实现目标。

包装对象[]

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));
}