【问题标题】:Can multidimensional arrays be passed via @MethodSource (junit 5.1)?可以通过@MethodSource(junit 5.1)传递多维数组吗?
【发布时间】:2018-11-03 17:50:38
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

从 JUnit Jupiter 5.3.1 开始,不支持。

如需深入了解 JUnit 团队在这方面的工作,请查看相应的GitHub issue

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

包装在 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));
}

【讨论】:

  • 谢谢 Sam,不应该是 Arguments.of((Object) new ... 代替 arguments(... 吗?
  • Arguments.of(...) 自 JUnit Jupiter 5.0 起就存在。 Arguments.arguments(...) 从 5.3 开始存在,是 Arguments.of(...) 的别名。所以,arguments() 在我的示例中是 static 导入。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
相关资源
最近更新 更多