«1. Обзор
В этой статье мы продемонстрируем несколько аспектов создания отчетов о покрытии кода с помощью Cobertura.
Проще говоря, Cobertura — это инструмент для составления отчетов, который вычисляет покрытие тестами кодовой базы — процент ветвей/строк, к которым обращаются модульные тесты в проекте Java.
2. Плагин Maven
2.1. Конфигурация Maven
Чтобы начать вычисление покрытия кода в вашем проекте Java, вам необходимо объявить подключаемый модуль Cobertura Maven в вашем файле pom.xml в разделе отчетов:
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.7</version>
</plugin>
</plugins>
</reporting>
Вы всегда можете проверить последнюю версию плагин в центральном репозитории Maven.
После этого запустите Maven, указав cobertura:cobertura в качестве цели.
Это создаст подробный отчет в стиле HTML, показывающий статистику покрытия кода, собранную с помощью инструментария кода: покрыты этими тестами.
Для каждого условного оператора у вас есть две ветви, так что, по сути, у вас будет в два раза больше ветвей, чем у условных операторов.
Фактор сложности отражает сложность кода — он увеличивается, когда увеличивается количество ветвей в коде.
Теоретически, чем больше у вас веток, тем больше тестов вам нужно реализовать, чтобы увеличить показатель покрытия веток.
2.2. Настройка расчета покрытия кода и проверок
Вы можете игнорировать/исключать определенный набор классов из инструментирования кода, используя теги ignore и exclude:
После расчета покрытия кода наступает фаза проверки. Этап проверки обеспечивает достижение определенного уровня покрытия кода.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<instrumentation>
<ignores>
<ignore>com/baeldung/algorithms/dijkstra/*</ignore>
</ignores>
<excludes>
<exclude>com/baeldung/algorithms/dijkstra/*</exclude>
</excludes>
</instrumentation>
</configuration>
</plugin>
Вот базовый пример того, как настроить фазу проверки:
При использовании флага haltOnFailure Cobertura приведет к сбою сборки, если одна из указанных проверок не пройдена.
<configuration>
<check>
<haltOnFailure>true</haltOnFailure>
<branchRate>75</branchRate>
<lineRate>85</lineRate>
<totalBranchRate>75</totalBranchRate>
<totalLineRate>85</totalLineRate>
<packageLineRate>75</packageLineRate>
<packageBranchRate>85</packageBranchRate>
<regexes>
<regex>
<pattern>com.baeldung.algorithms.dijkstra.*</pattern>
<branchRate>60</branchRate>
<lineRate>50</lineRate>
</regex>
</regexes>
</check>
</configuration>
Теги branchRate/lineRate указывают минимальный допустимый показатель покрытия ветвей/линий, требуемый после инструментирования кода. Эти проверки можно расширить до уровня пакета с помощью тегов packageLineRate/packageBranchRate.
Также можно объявить определенные проверки правил для классов с именами, соответствующими определенному шаблону, с помощью тега regex. В приведенном выше примере мы гарантируем, что для классов в пакете com.baeldung.algorithms.dijkstra и ниже должна быть достигнута определенная оценка покрытия линии/ветви.
3. Плагин Eclipse
3.1. Установка
Cobertura также доступна в виде подключаемого модуля Eclipse под названием eCobertura. Чтобы установить eCobertura для Eclipse, вам необходимо выполнить следующие шаги и установить Eclipse версии 3.5 или выше:
Шаг 1: В меню Eclipse выберите «Справка» † «Установить новое программное обеспечение». Затем при работе с полем введите http://ecobertura.johoop.de/update/:
Шаг 2: Выберите eCobertura Code Coverage, нажмите «Далее» и следуйте инструкциям мастера установки.
Теперь, когда eCobertura установлена, перезапустите Eclipse и отобразите представление сеанса покрытия в Windows — Показать представление — Другое — Cobertura.
3.2. Использование Eclipse Kepler или более поздней версии
Для более новой версии Eclipse (Kepler, Luna и т. д.) установка eCobertura может вызвать некоторые проблемы, связанные с JUnit — более новая версия JUnit, упакованная с Eclipse, не полностью совместима с Средство проверки зависимостей eCobertura:
В качестве обходного пути вы можете загрузить старую версию JUnit и поместить ее в папку плагинов Eclipse.
Cannot complete the install because one or more required items could not be found.
Software being installed: eCobertura 0.9.8.201007202152 (ecobertura.feature.group
0.9.8.201007202152)
Missing requirement: eCobertura UI 0.9.8.201007202152 (ecobertura.ui
0.9.8.201007202152) requires 'bundle org.junit4 0.0.0' but it could not be found
Cannot satisfy dependency:
From: eCobertura 0.9.8.201007202152
(ecobertura.feature.group 0.9.8.201007202152)
To: ecobertura.ui [0.9.8.201007202152]
Это можно сделать, удалив папку org.junit.*** из %ECLIPSE_HOME%/plugins, а затем скопировав ту же папку из более старой установки Eclipse, совместимой с eCobertura.
После этого перезапустите Eclipse IDE и переустановите подключаемый модуль, используя соответствующий сайт обновлений.
3.3. Отчеты о покрытии кода в Eclipse
Чтобы рассчитать покрытие кода модульным тестом, щелкните правой кнопкой мыши свой проект/тест, чтобы открыть контекстное меню, затем выберите параметр «Покрыть как» → «JUnit Test».
«В представлении «Сеанс покрытия» вы можете проверить отчет о покрытии строк/ветвей для каждого класса:
Пользователи Java 8 могут столкнуться с распространенной ошибкой при расчете покрытия кода:
В этом случае Java жалуется на некоторые методы отсутствие надлежащей карты стека из-за более строгого верификатора байт-кода, введенного в более новых версиях Java.
java.lang.VerifyError: Expecting a stackmap frame at branch target ...
Эту проблему можно решить, отключив проверку в виртуальной машине Java.
Для этого щелкните проект правой кнопкой мыши, чтобы открыть контекстное меню, выберите «Обложка как», а затем откройте представление «Конфигурации покрытия». На вкладке аргументов добавьте флаг -noverify в качестве аргумента виртуальной машины. Наконец, нажмите кнопку покрытия, чтобы запустить расчет покрытия.
Вы также можете использовать флаг -XX:-UseSplitVerifier, но это работает только с Java 6 и 7, так как разделенный верификатор больше не поддерживается в Java 8.
4. Заключение
В этой статье мы кратко показали, как использовать Cobertura для расчета покрытия кода в проекте Java. Мы также описали шаги, необходимые для установки eCobertura в вашей среде Eclipse.
Cobertura — отличный, но простой инструмент для покрытия кода, но он не поддерживается активно, поскольку в настоящее время его превосходят более новые и более мощные инструменты, такие как JaCoCo.
Наконец, вы можете проверить пример, приведенный в этой статье, в проекте GitHub.
«