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