我们可以在 Junit 5 中将 @RepeatedTest 与 @ParameterizedTest 一起使用吗

问题描述 投票:0回答:2

目前,我正在(尝试)将现有的 Junit4 项目迁移到 Junit5。

我陷入了必须同时使用@RepeatedTest 和@ParameterizedTest 的境地。 尝试此操作会引发默认异常 -

No Runnable Methods found

作为替代方案,我应该能够从两个不同的源将参数传递给每个测试 - 最终得到第二个源的

Null
值。

junit5
2个回答
8
投票

不,不可能在同一方法上使用

@RepeatedTest
@ParameterizedTest
,因为两者都是
@TestTemplate
的实现,并且一个方法只能有一个 测试模板。有关详细信息,请参阅 JUnit 5 问题 #1224

但请注意,JUnit Jupiter 最终将支持容器模板。有关详细信息,请参阅 JUnit 5 问题 #871


0
投票

这是 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
© www.soinside.com 2019 - 2024. All rights reserved.