如何在单元测试中排除容易出错的情况?

Posted

技术标签:

【中文标题】如何在单元测试中排除容易出错的情况?【英文标题】:How to exclude error prone from being run on unit tests? 【发布时间】:2019-09-09 03:57:44 【问题描述】:

maven-compiler-plugin:3.8.0:testCompile @ foo-child 运行时,线程转储显示errorprone 需要很长时间。我相信有一个容易出错的错误,但现在我宁愿让 errorprone 不在单元测试上运行。

我有一个父 pom.xml:

<modules>
  <module>foo-child</module>
</modules>
<dependencyManagement>
  <dependency>
    <groupId>com.google.errorprone</groupId>
    <artifactId>error_prone_annotations</artifactId>
  </dependency>
  // also has dependency for io.norberg auto-matter and com.google.auto.value auto-value
</dependencyManagement>
<build>
  <plugins>
     <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        // also has annotationProcessorPaths configuration for auto-matter and auto-value
     </plugin>
  </plugins>
</build>

我可以在 foo-child pom.xml 中添加什么内容,让我可以完全排除 maven-compiler-plugin:3.8.0:testCompile @ foo-child 的运行。

我不能完全排除容易出错的原因,因为像番石榴这样的其他东西都依赖它。

编辑:似乎this 用户正在尝试解决相同的问题。您知道我如何将那里给出的解决方案应用于我的案例吗?

【问题讨论】:

为什么忽略失败的测试?修复问题!如果失败来自具体的依赖项,则为了进行一致的测试而对其进行模拟。但是必须有人解决这个问题。 谁说测试失败了? testCompile 花费了非常长的时间——仅仅几百行代码就需要很多分钟。 cpu 在这段时间内被使用,容易出错。我只想编译测试,不要在单元测试文件上使用容易出错的东西。 【参考方案1】:

使用容易出错的命令行标志来禁用检查:-XepDisableAllChecks

类似 answer 用于禁用 bazel 中容易出错的功能

将 --javacopt="-XepDisableAllChecks" 添加到您的 bazelrc

对于特定测试,请使用-XepExcludedPaths

您可以通过 -XepExcludedPaths 标志从任何容易出错的检查中完全排除某些路径

-XepExcludedPaths:.*/build/generated/.*

【讨论】:

但我只想禁用对特定测试文件的检查 @lf215 您可以通过 -XepExcludedPaths 标志从任何容易出错的检查中完全排除某些路径【参考方案2】:

您可以将 -XepExcludedPaths 编译器选项添加到您的 maven 构建中。

https://errorprone.info/docs/flags

【讨论】:

【参考方案3】:

您可以将 maven 配置文件添加到 foo-child 模块,该模块将运行构建而不会出错。您还可以根据某个参数激活该配置文件,并在父 pom 中设置该参数的值。

【讨论】:

【参考方案4】:

您可以为此使用Inclusions and Exclusions of Tests 插件。

【讨论】:

以上是关于如何在单元测试中排除容易出错的情况?的主要内容,如果未能解决你的问题,请参考以下文章

项目中的每个测试都说“从实时单元测试中排除”?

如何在Visual Studio Test Runner中排除某些测试?

Sonarqube gradle 插件 - 排除测试源会破坏报告中的单元测试计数

单元测试

单元测试

Spring Boot 1.5.4:在单元测试中排除配置类