1

我正在尝试将二维数组传递给参数化测试。一维数组按预期工作,但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);
}   
4

1 回答 1

0

从 JUnit Jupiter 5.3.1 开始,不支持该功能。

如需深入了解 JUnit 团队在这方面所做的工作,请参阅相应的GitHub 问题

但是,以下两种解决方法都将暂时帮助您实现目标。

包装在 Object[] 中

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));
}
于 2018-11-04T15:01:08.350 回答