抑制跳过测试的万无一失的警告(由于 @Disabled/@Enabled 注释)?

Phi*_*zen 9 java junit maven-surefire-plugin junit5

当使用@Disabled* / @Enabled* 注释禁用测试时,这些测试将按预期跳过,但 Surefire 测试运行程序还会[WARNING]在受影响的类的结果行前面显示 。我的理解是,开发团队应该只看到需要进一步关注的事情的警告,因此我同意对某些测试(即由于未解决的错误而暂时禁用)发出警告可能是一件好事。

\n

现在:我正在编写的测试套件涵盖了特定于不同操作系统环境 \xe2\x80\x93 的代码,例如,某些测试仅在 Windows 环境中运行时才有意义。因此,对此类测试发出警告是没有意义的(用@EnabledOnOs(OS.WINDOWS))发出警告是没有意义的,因为它们绝对没问题,并且预计会跳过(实际上是强制性的)\xe2\x80\x93,因此这里根本没有待办事项或问题。

\n

我们如何控制哪些跳过的测试将导致警告(即通过@SuppressWarnings注释或某些万无一失的配置选项)?

\n

小智 2

无法抑制特定测试的警告。

但是,您至少可以减少 Maven Surefire 插件打印的警告数量。为此,您可以使用配置属性printSummary。请参阅文档以获取更多信息。因此,如果您在您的中添加这样的属性pom.xml

<properties>
    <surefire.printSummary>false</surefire.printSummary>
</properties>
Run Code Online (Sandbox Code Playgroud)

您不会看到每个测试的摘要,而只会在构建结束时看到最终的汇总摘要。

[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ demo ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[WARNING] Tests run: 1, Failures: 0, Errors: 0, Skipped: 1                   
[INFO]                                                                       
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

作为条件的替代解决方案,我建议您使用Tags

因此,您可以为测试类和/或方法添加“os”标签

[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ demo ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[WARNING] Tests run: 1, Failures: 0, Errors: 0, Skipped: 1                   
[INFO]                                                                       
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

然后,当执行 Maven 命令来运行测试时,您可以指定可以包含或排除哪些标签。例如:

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;


class TaggingDemo {

    @Test
    @Tag("windows")
    void testingForWidows() {
    }

    @Test
    @Tag("linux")
    void testingForLinux() {
    }

}
Run Code Online (Sandbox Code Playgroud)

因此,您不会看到任何从构建中“排除”的测试的警告。

[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ demo ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0                   
[INFO]                                                                       
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)