Файл фильтра FindBugs для игнорирования тестов JUnit

Мне нужно настроить файл фильтра для моих findbugs ant script, который сканирует только файлы 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/* будут скомпилированы в один каталог. В этом случае используйте файл фильтра и исключите пакеты или имена классов, которые соответствуют тестам.

<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, может быть много отчетов об ошибках, но количество ошибок будет превышать сверхурочные, если вы обратите на них внимание.