如何在Gradle中运行JUnit 5和JUnit 4测试套件?

时间:2019-02-02 12:39:08

标签: java gradle junit4 junit5

我的代码中有两种类型的测试,以UnitTest和IntegrationTest结尾。当然,有一些遗留的JUnit 4测试和应该由JUnit 5编写的新测试。

我想要什么:

可以从IDE(IntelliJ IDEA)运行的

UnitTestSuite和IntegrationTestSuit类,每个类都有按测试类名结尾的过滤器。另外,我希望两个不同的gradle任务分别运行自己的一组测试(理想情况下基于西装,或者至少基于类名)。

我尝试过的事情:

此测试套件在IDE上运行良好,据我了解,它应该同时运行JUnit 4和JUnit 5测试。但是,这种方法似乎更像是一种解决方法,而不是实际的套件支持。

@RunWith(JUnitPlatform.class)
@IncludeClassNamePatterns({ "^.*UnitTest$" })
public class UnitTestSuite {
}

我也创建了这个Gradle任务,但是它没有对我说任何测试:

WARNING: Ignoring test class using JUnitPlatform runner

test { Test t ->

    useJUnitPlatform()

    include "UnitTestSuite.class"
}

那么,有没有一种解决方案可以同时运行JUnit 4和JUnit 5测试,并从IDE和Gradle任务中按名称过滤(收集到西装)?

2 个答案:

答案 0 :(得分:1)

在Gradle中,您可以配置多个test任务,一个任务用于JUnit 4,另一个任务用于JUnit 5。

我在Spring Framework构建中完全做到了这一点。请参阅spring-test.gradle中的testJUnitJupitertest任务。

task testJUnitJupiter(type: Test) {
    description = "Runs JUnit Jupiter tests."
    useJUnitPlatform {
        includeEngines "junit-jupiter"
        excludeTags "failing-test-case"
    }
    filter {
        includeTestsMatching "org.springframework.test.context.junit.jupiter.*"
    }
    reports.junitXml.destination = file("$buildDir/test-results")
    // Java Util Logging for the JUnit Platform.
    // systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
}

test {
    description = "Runs JUnit 4 tests."
    dependsOn testJUnitJupiter, testNG
    useJUnit()
    scanForTestClasses = false
    include(["**/*Tests.class", "**/*Test.class"])
    exclude(["**/testng/**/*.*", "**/jupiter/**/*.*"])
    reports.junitXml.destination = file("$buildDir/test-results")
}

您当然可以命名它们并根据需要配置它们。

答案 1 :(得分:0)

有一些警告的替代选项是使用JUnit 5运行JUnit 4(甚至3)测试。为此,您将需要运行时类路径上的老式引擎,如下所示:

def junit5Version = "5.7.0"
dependencies {
    // other deps
    testImplementation "org.junit.jupiter:junit-jupiter:${junit5Version}"
    testRuntimeOnly "org.junit.vintage:junit-vintage-engine:${junit5Version}"
}

这也可以在IntelliJ IDEA中使用。

有关如何使JUnit 4的其他一些JUnit 4功能起作用的源和进一步说明,请参见:https://junit.org/junit5/docs/current/user-guide/#migrating-from-junit4-running