我无法确定它是否是缺少的功能,请参阅JUnit 问题 1154和我在那里的评论,或者只是我无法正确编写JUnit5中名称的语法。@ParameterizedTest
鉴于过去 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 = "#{index} multiply : {[0][0]} x {[0][1]} = {[0][2]}"
但它在语法上不正确。