【发布时间】:2020-11-21 00:30:23
【问题描述】:
我无法确定它是否是缺少的功能,请参阅那里的 JUnit issue 1154 和 my comment,或者只是我无法正确编写 JUnit5 中 @ParameterizedTest 的 name 的语法.鉴于过去 3 年这个问题一直存在,恐怕我不能等到我得到答案甚至那里的实施,所以我也想在这里问。
在我的示例 ParameterizedTest 中,我使用@MethodSource,它返回一个整数数组流,我想只使用这些数组的属性而不是所有{arguments},如果我使用{0},这无论如何都是一样的。这里很难口头解释,最好使用下面的代码示例。
package net.delphym.unittests;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
class DynamicTestCreationTestParam {
private static Stream<int[]> data() {
return Stream.of(new int[][] { {1, 2, 2}, {5, 3, 15}, {121, 4, 484} });
}
@DisplayName("Multiplication test")
@ParameterizedTest(name = "#{index} for {arguments}: {0} x {1} = {2}")
@MethodSource("data")
void testWithStringParameter(int[] data) {
MyClass tester = new MyClass();
int m1 = data[0];
int m2 = data[1];
int expected = data[2];
assertEquals(expected, tester.multiply(m1, m2));
}
// class to be tested
class MyClass {
public int multiply(int i, int j) {
return i *j;
}
}
}
第一次运行的测试结果输出如下所示:#1 for [1, 2, 2]: [1, 2, 2] x {1} = {2}
理想情况下,我希望看到这个:#1 multiply: 1 x 2 = 2。
那么问题是 @ParametrizedTest(name) 定义符合我的预期?
我正在尝试这样的事情:
name = "#{index} multiply : {[0][0]} x {[0][1]} = {[0][2]}"
但它在语法上是错误的。
【问题讨论】:
-
GitHub 上的人们非常活跃,他们为我提供了很好的解决方法/解决方案来满足我的需求。只需检查下面我的几个帖子:github.com/junit-team/junit5/issues/1154#issuecomment-666952289 正如我所说的那样,这是更多的解决方法,仍然很高兴知道到目前为止它是否是 JUnit5 的限制,或者当
int[]作为传入时可以以某种方式实现论据 -
您仍然可以发布解决方法作为答案。有总比没有好。
标签: java junit5 parametrized-testing