Как исключить классы из расчета покрытия в EclEmma, ​​фактически не исключая их из самого покрытия

Я использую EclEmma для проверки охвата моих тестов сценариев и тестов вариантов использования в моем проекте. У меня есть базовый пакет, который содержит самые общие классы и тесты вариантов использования. Покрытие выглядит так:

Покрытие кода в нашем проекте

Я хочу исключить тесты варианта использования (например, BugReportTest) из расчета покрытия. Но я хочу, чтобы тесты внутри него учитывались. Я знаю, как исключить весь класс из покрытия, но если я это сделаю, мой процент покрытия упадет, потому что фактические тесты, которые проверяют, какие строки моего кода тестируются, забываются. Эти тесты вариантов использования должны оставаться в базовом пакете из соображений конфиденциальности.


person Programmer1994    schedule 03.05.2016    source источник


Ответы (1)


По техническим причинам может потребоваться исключить определенные классы из анализа покрытия кода. Следующие параметры настраивают агент покрытия для исключения определенных классов из анализа. За исключением оптимизации производительности или технических проблем, эти опции обычно не требуются.

  1. Исключает: список имен классов, которые следует исключить из анализа выполнения. Записи списка разделены colon (:) и могут использовать wildcard characters (* and ?). (Default: empty)

  2. Исключить загрузчики классов. Список имен загрузчиков классов, которые следует исключить из анализа выполнения. Записи списка разделены colon (:) и могут использовать wildcard characters (* and ?). Эта опция может потребоваться в случае особых платформ, которые конфликтуют с инструментарием кода JaCoCo, в частности, загрузчики классов, которые не имеют доступа к классам среды выполнения Java. (Default: sun.reflect.DelegatingClassLoader)

Предупреждение: используйте эти параметры с осторожностью! Недопустимые записи могут нарушить работу средства запуска покрытия кода. Также не используйте эти параметры для определения области анализа. Исключенные классы по-прежнему будут отображаться как не охваченные.

Ссылка на ресурс:

  1. Настройки покрытия кода EclEmma

Все следующие примеры определяют один и тот же набор шаблонов включения/исключения:

  1. <filter includes="com.foo.*" excludes="com.foo.test.*, com.foo.*Test*" />
  2. <filter includes="com.foo.*" /> <filter excludes="com.foo.test.*, com.foo.*Test*" />
  3. <filter value="+com.foo.*, -com.foo.test.*, -com.foo.*Test*" />
    <filter excludes="com.foo.*Test*" file="myfilters.txt" />
    , где файл myfilters.txt содержит следующие строки:

    -com.foo.test.* +com.foo.*

Ссылка на ресурс:

  1. Фильтры покрытия
  2. Я уверен, что все мои классы построены с -g(debug='true') и однако EMMA по-прежнему жалуется на отсутствие отладочной информации!

Игнорировать покрытие кода модульными тестами в EclEmma

Preferences->Java->Code Coverage и установите для параметра "Only path entries matching" значение src/main/java - вроде работает хорошо

person SkyWalker    schedule 07.05.2016
comment
Рано дал награду: p Это не работает для меня. Тесты находятся в одной папке и поэтому не могут быть исключены... Если я исключаю их с помощью excludes, тесты не выполняются, но мне нужно, чтобы они выполнялись, чтобы иметь покрытие в других классах... - person Programmer1994; 09.05.2016
comment
@CedricCornelis На самом деле я предоставил процедуру исключения. Я также предоставил несколько полезных ссылок. Вы можете пройти через это. - person SkyWalker; 09.05.2016
comment
@SkyWalker В Excludes: раздел, как мы должны указать имя класса/имя пакета, не могли бы вы привести пример, я имею в виду, должно ли имя класса/пакета быть com.abc, SomeClass.java или com.abc/SomeClass.java - person Monis Majeed; 10.01.2017