Введение в Кобертуру
1. обзор
В этой статье мы продемонстрируем несколько аспектовgenerating code coverage reports using Cobertura.
Проще говоря, Cobertura - это инструмент отчетности, который вычисляет покрытие тестами для кодовой базы - процент ветвей / линий, к которым обращаются юнит-тесты в проекте Java.
2. Maven Plugin
2.1. Конфигурация Maven
Чтобы начать вычисление покрытия кода в вашем Java-проекте, вам необходимоdeclare the Cobertura Maven plugin in your pom.xml file в разделе отчетов:
org.codehaus.mojo
cobertura-maven-plugin
2.7
Вы всегда можете проверить последнюю версию плагина в папкеMaven central repository.
После этого запустите Maven, указав в качестве целиcobertura:cobertura.
Это создаст подробный отчет в стиле HTML со статистикой покрытия кода, собранной с помощью инструментария кода:
The line coverage metric shows how many statements are executed в модульных тестах, аthe branch coverage metric focuses on how many branches are covered by those tests.
Для каждого условного выражения у вас есть две ветки, так что в итоге у вас будет вдвое больше ветвей, чем у условных операторов.
The complexity factor reflects the complexity of the code - возрастает при увеличении количества ветвей в коде.
Теоретически, чем больше у вас веток, тем больше тестов вам нужно выполнить, чтобы увеличить оценку охвата ветвей.
2.2. Настройка расчета и проверки покрытия кода
Вы можете игнорировать / исключать определенный набор классов из инструментария кода, используя тегиignore иexclude:
org.codehaus.mojo
cobertura-maven-plugin
2.7
com/example/algorithms/dijkstra/*
com/example/algorithms/dijkstra/*
После расчета покрытия кода наступает фазаcheck. The check phase ensures that a certain level of code coverage is reached.
Вот базовый пример настройки фазыcheck:
true
75
85
75
85
75
85
com.example.algorithms.dijkstra.*
60
50
При использовании флагаhaltOnFailure Cobertura вызовет сбой сборки, если одна из указанных проверок не удалась.
ТегиbranchRate/lineRate определяют минимально приемлемую оценку покрытия ветви / линии, требуемую после инструментария кода. Эти проверки могут быть расширены до уровня пакета с помощью теговpackageLineRate/packageBranchRate.
Также можно объявить определенные проверки правил для классов с именами, соответствующими определенному шаблону, используя тегregex. В приведенном выше примере мы гарантируем, что для классов в пакетеcom.example.algorithms.dijkstra и ниже должен быть достигнут определенный показатель охвата линии / ответвления.
3. Eclipse Plugin
3.1. Монтаж
Cobertura также доступна как плагин Eclipse под названиемeCobertura. Чтобы установитьeCobertura для Eclipse, вам необходимо выполнить следующие шаги и установить Eclipse версии 3.5 или выше:
Step 1: В меню Eclipse выберитеHelp →Install New Software. Затем в полеwork with введитеhttp://ecobertura.johoop.de/update/:
Step 2: ВыберитеeCobertura Code Coverage, нажмите «Далее», а затем следуйте инструкциям мастера установки.
Теперь, когдаeCobertura установлен, перезапустите Eclipse и покажите представление сеанса покрытия подWindows → Show View → Other → Cobertura.
3.2. Использование Eclipse Kepler или более поздней версии
Для более новой версии Eclipse (Kepler, Luna и т. Д.) УстановкаeCobertura может вызвать некоторые проблемы, связанные с JUnit -the newer version of JUnit packaged with Eclipse is not fully compatible with eCobertura‘s dependencies checker:
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]
В качестве обходного пути вы можете загрузить старую версию JUnit и поместить ее в папку плагинов Eclipse.
Это можно сделать, удалив папкуorg.junit.*** из%ECLIPSE_HOME%/plugins, а затем скопировав ту же папку из более старой установки Eclipse, совместимой сeCobertura.
После этогоrestart your Eclipse IDE and re-install the plugin использует соответствующий сайт обновления.
3.3. Отчеты о покрытии кода в Eclipse
Чтобы рассчитать покрытие кода модульным тестом, щелкните правой кнопкой мыши свой проект / тест, чтобы открыть контекстное меню, затем выберите параметрCover As → JUnit Test.
В представленииCoverage Session вы можете проверить отчет о покрытии линии / ответвления для каждого класса:
Пользователи Java 8 могут столкнуться с распространенной ошибкой при расчете покрытия кода:
java.lang.VerifyError: Expecting a stackmap frame at branch target ...
В этом случае Java жалуется на то, что некоторые методы не имеют надлежащей карты стека из-за более строгого верификатора байт-кода, введенного в более новых версиях Java.
Эту проблему можно решить, отключив проверку в виртуальной машине Java.
Для этого щелкните проект правой кнопкой мыши, чтобы открыть контекстное меню, выберитеCover As, а затем откройте представлениеCoverage Configurations. На вкладке аргументов добавьте флаг-noverify в качестве аргумента виртуальной машины. Наконец, нажмите кнопкуcoverage, чтобы запустить расчет покрытия.
Вы также можете использовать флаг-XX:-UseSplitVerifier, но он работает только с Java 6 и 7, так как разделенный верификатор больше не поддерживается в Java 8.
4. Заключение
В этой статье мы вкратце показали, как использовать Cobertura для вычисления покрытия кода в проекте Java. Мы также описали шаги, необходимые для установкиeCobertura в вашей среде Eclipse.
Cobertura - отличный, но простой инструмент для покрытия кода, но он активно не поддерживается, так как в настоящее время его превосходят более новые и более мощные инструменты, такие какJaCoCo.
Наконец, вы можете ознакомиться с примером из этой статьи вGitHub project.