目前,我正在(尝试)将现有的 Junit4 项目迁移到 Junit5。
我陷入了必须同时使用@RepeatedTest 和@ParameterizedTest 的境地。 尝试此操作会引发默认异常 -
No Runnable Methods found
作为替代方案,我应该能够从两个不同的源将参数传递给每个测试 - 最终得到第二个源的
Null
值。
不,不可能在同一方法上使用
@RepeatedTest
和 @ParameterizedTest
,因为两者都是 @TestTemplate
的实现,并且一个方法只能有一个 测试模板。有关详细信息,请参阅 JUnit 5 问题 #1224。
但请注意,JUnit Jupiter 最终将支持容器模板。有关详细信息,请参阅 JUnit 5 问题 #871。
这是 JUnit Pioneer JUnit 5 扩展包中的
@CartesianTest
的解决方法,其中 int 流包含重复计数:
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.junitpioneer.jupiter.cartesian.ArgumentSets;
import org.junitpioneer.jupiter.cartesian.CartesianTest;
class SampleRepeatedParameterizedTest {
static ArgumentSets data() {
// @formatter:off
final Stream<Integer> intStream = IntStream.range(0, 2)
.mapToObj(Integer::valueOf);
return ArgumentSets.argumentsForFirstParameter("aaa", "bbb")
.argumentsForNextParameter(intStream);
// @formatter:on
}
@CartesianTest
@CartesianTest.MethodFactory("data")
void testName(final String data, final int unused) throws Exception {
System.out.printf("run 0x%08X: %s%n", System.identityHashCode(this), data);
}
}
输出示例:
run 0x63A12C68: aaa
run 0x2F217633: aaa
run 0x0A530D0A: bbb
run 0x01A18644: bbb