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

时间:2016-09-12 07:01:48

标签: gradle junit junit5

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

3 个答案:

答案 0 :(得分:12)

<强>更新

Gradle 4.6提供built-in support for the JUnit Platform,允许您使用标准Gradle test任务运行JUnit Jupiter测试,该任务可立即生成HTML报告。

回答4.6之前的Gradle版本

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

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

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

但是,如果您询问 Gradle 是否可以为通过junitPlatformTest任务运行的测试生成HTML报告,那么答案是&#34;不,不幸的是没有。& #34;原因是标准Gradle test任务仅基于其自己的专有&#34;二进制&#34;生成HTML报告。报告格式。由于junitPlatformTest任务不会以Gradle的二进制格式生成报告,因此Gradle本身无法为JUnit平台测试生成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'
}

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

此致

Sam( Core JUnit 5 committer

答案 1 :(得分:1)

在我的<BytesBuilder> magicString.add(--the bytes above--) 文件夹中创建TEST-junit-jupiter.xml的java命令中添加以下行。此xml文件包含有关运行的测试用例数,已通过/未通过的测试数等的所有信息

target/test-result

答案 2 :(得分:-1)

是的,您可以使用Jacoco插件。

以下是一个例子:

apply plugin: 'war' or apply plugin: 'java'
apply plugin: "jacoco"

test {
    reports.junitXml.destination="build/test-results"
    jacoco {
        destinationFile = file("build/jacoco/jacoco.exec")
        append=true
    }
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
        html.destination "${buildDir}/jacocoHtml"
    }
}

问候。