Исключить методы из покрытия кода с помощью Cobertura - PullRequest
53 голосов
/ 04 июня 2009

Есть ли способ исключить код из включения в отчеты покрытия Cobertura? У нас есть несколько методов, которые не должны быть включены в отчет о покрытии и, следовательно, не снижают номера покрытия.

Я знаю, что у Clover такая функциональность, но я не нашел ничего подобного для Cobertura.

Ответы [ 5 ]

56 голосов
/ 04 июня 2009

Вы можете исключить классы из инструментовки. Тогда они не должны появляться в отчетах. См. исключение утверждений ниже.

Вы также можете игнорировать вызовы некоторых методов. См. игнорирование заявления ниже.

Если вы используете maven, см. руководство по плагину maven .

    <configuration>
      <instrumentation>
        <ignores>
          <ignore>com.example.boringcode.*</ignore>
        </ignores>
        <excludes>
          <exclude>com/example/dullcode/**/*.class</exclude>
          <exclude>com/example/**/*Test.class</exclude>
        </excludes>
      </instrumentation>
    </configuration>

А для муравья см. это .

<cobertura-instrument todir="${instrumented.dir}">
  <ignore regex="org.apache.log4j.*" />
  <fileset dir="${classes.dir}">
    <include name="**/*.class" />
    <exclude name="**/*Test.class" />
  </fileset>
  <fileset dir="${jars.dir}">
    <include name="my-simple-plugin.jar" />
  </fileset>
</cobertura-instrument>
21 голосов
/ 25 июля 2011

Это уже давно ломало мне голову.

Моя проблема заключалась в том, что у меня была настройка плагина cobertura maven в разделе отчетов вместо раздела сборки.

Настройки инструментария и, следовательно, исключение классов или пакетов, не будут применены, если вы не настроите их в разделе сборки, поэтому следите за этим.

17 голосов
/ 26 ноября 2012

Не забудьте также исключить внутренние классы.

<exclude>path/to/class/MyClass*.class</exclude>

Мне потребовалось много времени, чтобы заметить, что я пропустил звездочку!

4 голосов
/ 30 декабря 2010

Cobertura в настоящее время не предоставляет такую ​​функцию, как и Emma (которую мы используем), хотя она указана в качестве грядущего улучшения - хотя в форме расширения к правилам исключения, я считаю, а не в качестве аннотации.

Было бы удобно аккуратно прикрыть эти несколько недоступных уголков, чтобы вы могли стремиться на 100%, не смешиваясь.

Я думаю, что аннотации, вероятно, были бы более дружественным способом сделать это, но они должны быть довольно явно названы и основаны на списке приемлемых сценариев, так как я боюсь, что в противном случае что-то вроде '@ExcludeFromCoverage' будет добавлено щедро.

0 голосов
/ 22 января 2019

Начиная с 2.0 вы можете написать свою собственную @CoverageIgnore аннотацию.

Это будет признано Cobertura, который не будет рассматривать аннотированные методы (насколько я знаю, не работает с классами).

  1. Создать пустую аннотацию:
public @interface CoverageIgnore {}
  1. Затем аннотируйте методы, которые вы хотите исключить из отчетов:
public class SomeClass {
    @CoverageIgnore
    public void foo(String baz) {
        // useless stuff
    }
}

Источник: https://github.com/cobertura/cobertura/wiki/Coverage-Annotations

...