首页 > 解决方案 > Junit5的测试报告输出插件,还有其他更好的选择吗?Gradle 平台或 maven 平台

问题描述

我正在学习使用junit5。我按照教程编写了一些动态测试,然后使用 gradle 运行它们。但是 gradle 默认输出的测试报告对我来说不够好,它不包含嵌套的测试容器结构。在运行动态测试时,是否有任何替代方法可以输出格式更好的测试报告?类似于intellijidea测试报告。 编码:

    @TestFactory
    Stream<DynamicNode> dynamicTestsWithContainers() {
        return Stream.of("A", "B", "C")
                .map({ input ->
                    dynamicContainer("Container " + input, Stream.of(
                            dynamicTest("not null", { -> assertNotNull(input) }) as DynamicNode,
                            dynamicContainer("properties", Stream.of(
                                    dynamicTest("length > 0", { -> assertTrue(input.length() > 0) }),
                                    dynamicTest("not empty", { -> assertFalse(input.isEmpty()) })
                            ))
                    ))
                })
    }

使用 gradle 运行:

html 报告 xml 报告

使用intellij理念运行:

intellij 创意报告

标签: mavengradlejunit5

解决方案


正如我发现的那样,maven-surefire-plugin由于版本 3.0.0 支持使用JUnit5Xml30StatelessReport. 使用示例在文档中给出:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M4</version>
    <configuration>
        <testFailureIgnore>true</testFailureIgnore>
        <statelessTestsetReporter
            implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
            <disable>false</disable>
            <version>3.0</version>
            <usePhrasedFileName>true</usePhrasedFileName>
            <usePhrasedTestSuiteClassName>true</usePhrasedTestSuiteClassName>
            <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
            <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
        </statelessTestsetReporter>
    </configuration>
 </plugin>

usePhrasedXXX参数设置为时,本报告器尊重动态测试描述true。但是,它仍然不尊重嵌套结构(所有 tescase 都在一个平面列表中)。


推荐阅读