如何在单元测试中排除容易出错的情况?
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中排除某些测试?