首页 > 解决方案 > 具有 jupiter-vintage-engine 规则的 Junit 5 Launcher 不支持 JUnit4 @ParametrizedTest

问题描述

我正在移植一个基于 JUnit4 的测试框架,该框架使用 JUnitCore 来启动带有 JUnit5 启动器、junit-vintage-engine 和带有 ClassSelector 的 LauncherDiscoveryRequest 的单元测试。

它适用于除@ParameterizedTest 之外的所有情况。Launcher 不支持参数化测试。

如何让 Launcher 支持 JUnit4 参数化测试?

我尝试添加 testCompile("org.junit.jupiter:junit-jupiter-params:${junit_jupiter_version}")

package ...;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import ...TestCategory;
import ...TestType;
import ...DataScramblingRegexTest;

@TestType(...TestCategory.UNIT)
@RunWith(Parameterized.class)
public class RegexGenTest {

    private static final int LOOKAROUND_ATTEMPTS = 100;

    @Parameterized.Parameter(0)
    public String regex;

    @Parameterized.Parameters(name = "{index}: RegexGenTest: {0}")
    public static Iterable<String[]> data() {
        return DataScramblingRegexTest.data();
    }

    @Test
    public void testTransformAndGenerate() {
        //even though Data Scramble Random Text doesn't transform every regex,
        //even if we do, and run it through Generex, it should still work.
        final String transformedRegex = RegexGen.transform(this.regex);
        String randomStr = RegexGen.generate(transformedRegex);
        if (RegexGen.containsLookArounds(this.regex)) {
            for (int i = 0; i < LOOKAROUND_ATTEMPTS; i++) {
                randomStr = RegexGen.generate(transformedRegex);
                if (randomStr.matches(this.regex)) {
                    return;
                }
            }
            Assert.fail("Lookaround failed");
        }
        Assert.assertTrue("generated string does not match regex: " + randomStr, randomStr.matches(this.regex));
    }
}

构建.gradle

    compile("junit:junit:${junit_version}")
    testCompile("org.junit.vintage:junit-vintage-engine:${junit_jupiter_version}")
    testCompile("org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}")
    testCompile("org.junit.jupiter:junit-jupiter-params:${junit_jupiter_version}")
    testCompile("org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}")

在哪里

junit_version=4.12
junit_jupiter_version=5.4.2

注意专有TestCategory.UNIT注释,我们在测试发现代码中使用它并创建 aLauncher和 a LauncherdiscoveryRequestwith ClassSelector

我希望带有 junit-jupiter-vintage 引擎的 JUnit5 启动器支持 JUnit 4 参数,但它不受支持。

标签: junit5junit-vintage

解决方案


推荐阅读