用于忽略 JUnit 测试的 FindBugs 过滤器文件

Posted

技术标签:

【中文标题】用于忽略 JUnit 测试的 FindBugs 过滤器文件【英文标题】:FindBugs filter file for ignoring JUnit tests 【发布时间】:2010-10-19 21:11:15 【问题描述】:

我需要为我的 findbugs ant 脚本设置一个过滤器文件,它只扫描 src/* 文件而不是 test/* 文件。

检查所有类同时忽略名称中带有“test”的任何文件名或包名的语法是什么?

【问题讨论】:

【参考方案1】:

FindBugs 实际上是扫描编译后的类文件,而不是sourcePath。如果要将 src/* 和 test/* 文件编译到不同的目录,则可以只使用嵌套的 <class...> 元素。

<findbugs home="$findbugs.dir" output="xml:withMessages" 
    outputFile="$findbugs.report.xml" jvmargs="-Xmx256M" 
    effort="max" projectName="$ant.project.name" 
    auxClasspathRef="findbugs.classpath" 
    sourcePath="$src.dir">
  <class location="$src.classes.dir"/>
</findbugs> 

如果 src/* 和 test/* 都编译到一个目录中,这将不起作用。在这种情况下,请使用 filter file 并排除与测试对应的包或类名。

<findbugs home="$findbugs.dir" output="xml:withMessages" 
    outputFile="$findbugs.report.xml" jvmargs="-Xmx256M" 
    effort="max" projectName="$ant.project.name" 
    auxClasspathRef="findbugs.classpath" 
    sourcePath="$src.dir"
    excludefilter="exclude.xml">
  <class location="$classes.dir"/>
</findbugs> 

exclude.xml 的样子:

<FindBugsFilter>
  <Match>
    <Class name="~.*Test$"/>
  </Match>
  <Match>
    <Package name="~test\..*"/>
  </Match>
</FindBugsFilter>

【讨论】:

很好的解释......显然我需要开始喝咖啡什么的。删除了我的答案,这是正确的误导。【参考方案2】:

顺便说一下,用 FindBugs 覆盖单元测试也是一个好主意。没有理由对测试使用较低的质量标准。测试中的错误就是这样,错误。

当然,如果您第一次运行 FindBugs,可能会有很多错误报告,但如果您注意它们,错误数会随着时间的推移而下降。

【讨论】:

这样做的问题是你在单元测试中测试错误情况(例如传递null作为标记@Nonnull的参数) 为什么在设置了 findbugs 后还需要测试 null 案例? @konstantin.zaikin 因为您也想知道在运行时可能发生什么,而不仅仅是在编译时可以推断出什么

以上是关于用于忽略 JUnit 测试的 FindBugs 过滤器文件的主要内容,如果未能解决你的问题,请参考以下文章

有条件地忽略 JUnit 4 中的测试

SpringBoot框架下基于Junit的单元测试

IntelliJ 忽略 JUnit 5

如何编写自定义的 gradle 任务以不忽略 Findbugs 违规但在分析完成后失败

如何在eclipse中通过Juit进行单元测试

junit是啥?