如何为JUnit 5测试创建HTML报告?

Jue*_*ann 10 junit gradle junit5

当通过Gradle启动JUnit测试时,是否已经有可能生成HTML报告?任何提示或评论都表示赞赏.

Sam*_*nen 13

UPDATE

Gradle 4.6为JUnit平台提供内置支持,允许您使用标准Gradle test任务运行JUnit Jupiter测试,该任务可立即生成HTML报告.


回答4.6之前的Gradle版本

JUnit Platform Gradle Plugin生成JUnit 4样式的XML测试报告.

build/test-results/junit-platform默认情况下,这些XML文件将输出到.

因此,如果您的构建服务器知道如何解析JUnit 4样式的XML报告,您只需将其指向该目录中的XML文件,然后让构建服务器为您生成HTML报告.

但是,如果您询问Gradle是否可以为通过junitPlatformTest任务运行的测试生成HTML报告,那么答案是"不,不幸的是没有".原因是标准Gradle test任务仅基于其自己的专有"二进制"报告格式生成HTML报告.由于junitPlatformTest任务不以Gradle的二进制格式生成报告,因此Gradle本身无法为JUnit Platform测试生成HTML报告.

尽管如此,实际上还有一个解决方法:您可以在Gradle构建中使用Ant.Ant的任务是聚合基于JUnit 4的XML报告并从这些聚合报告生成HTML报告.输出不是很现代,但它至少是人类可读的.缺点是默认的XSLT样式表不显示通过JUnit平台运行的测试的测试类名.

无论如何,您可以在Gradle中配置Ant的JUnitReport任务,如下所示.

junitPlatform {
    // configure as normal
}

configurations {
    junitXmlToHtml
}

task generateHtmlTestReports << {
    def reportsDir = new File(buildDir, 'test-reports')
    reportsDir.mkdirs()

    ant.taskdef(
        name: 'junitReport',
        classname: 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator',
        classpath: configurations.junitXmlToHtml.asPath
    )

    ant.junitReport(todir: "$buildDir/test-results/junit-platform", tofile: "aggregated-test-results.xml") {
        fileset(dir: "$buildDir/test-results/junit-platform")
        report(format: 'frames', todir: reportsDir)
    }
}

afterEvaluate {
    def junitPlatformTestTask = tasks.getByName('junitPlatformTest')
    generateHtmlTestReports.dependsOn(junitPlatformTestTask)
    check.dependsOn(generateHtmlTestReports)
}

dependencies {
    // configure as normal ...

    junitXmlToHtml 'org.apache.ant:ant-junit:1.9.7'
}
Run Code Online (Sandbox Code Playgroud)

然后,执行gradle check将生成HTML报告build/test-reports/index.html.

问候,

山姆(核心JUnit 5提交者)

  • 重要的是,如果您使用junit 5附带的junit 5 gradle插件(在4.6之前启用),则需要删除配置.我花了一段时间来弄清楚这一点.我们使用了org.junit.platform:junit-platform-gradle-plugin:1.0.1.从4.6开始不再需要 (3认同)
  • 您可以_watch_以下问题,以获取Gradle团队官方JUnit Platform支持的更新:https://github.com/gradle/gradle/issues/828 (2认同)