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

标签 gradle junit junit5

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

最佳答案

更新

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

<小时/>

4.6之前的Gradle版本的答案

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

这些 XML 文件默认输出到 build/test-results/junit-platform

因此,如果您的构建服务器知道如何解析 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 平台运行的测试的测试类名称。

无论如何,你都可以配置Ant的JUnitReport Gradle 中的任务如下。

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(核心 JUnit 5 提交者)

关于gradle - 如何为 JUnit 5 测试创建 HTML 报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39444908/

相关文章:

java - 系统中发现 Selenium 元素,但 Jenkins 中未发现

java - 什么导致junit警告org.junit.platform.launcher.core.EngineDiscoveryOrchestrator lambda$logTestDescriptorExclusionReasons$7

unit-testing - 暂停可取消协程取消的 Kotlin Mockk 测试

java - 通过迭代表比较表中的值并选择该特定值前面的复选框

spring-boot - 如何排除从项目依赖项中扫描的 Spring bean?

Android:使用具有 gradle 依赖项的库项目时出现 ClassNotFoundException

kotlin + junit 5 -assertAll 用法

ios - 在 Xcode 10 升级后运行 createIPA 任务

junit - 与 Arquillian 和 Wildfly 的集成测试

java - @Test 后回滚事务