Исключить методы из покрытия кода с помощью 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, который будет избегать рассмотрения аннотированных методов (насколько я знаю, не работает с классами).
- Создать пустую аннотацию:
public @interface CoverageIgnore {}
- Затем аннотируйте методы, которые вы хотите исключить из отчетов:
public class SomeClass {
@CoverageIgnore
public void foo(String baz) {
// useless stuff
}
}
Источник: https://github.com/cobertura/cobertura/wiki/Coverage-Annotations