Исключить методы из покрытия кода с помощью Cobertura

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

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

Ответ 1

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

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

Если вы используете 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>

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

Начиная с 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