В этом примере я расширю свой предыдущий пример хранения ваших модульных и интеграционных тестов в отдельных пакетах и объясню, как также получать статистику покрытия кода.
Для этого я продолжаю использовать Maven, добавляя Sonar и Jacoco для обеспечения покрытия кода. Вы можете запустить приведенный ниже пример, но вам нужно будет прочитать первую статью здесь, чтобы понять его. http://johndobie.blogspot.com/2011/06/seperating-maven-unit-integration-tests.html
1.1 Пример структуры
Здесь у нас есть типичная структура maven и наша новая папка \ src \ integratest \ java
1.2 Запуск примера
Полный код размещен на Google Code. Используйте следующие команды, чтобы проверить и запустить его.
svn co https://designbycontract.googlecode.com/svn/trunk/sonar cd sonar mvn –Psonar,it clean install sonar:sonar
Вам нужно запустить сонар. Инструкции по установке можно найти здесь. http://docs.codehaus.org/display/SONAR/Install+Sonar
Перейдите в веб-интерфейс гидролокатора и нажмите «Настроить виджеты», чтобы добавить виджет ИТ-покрытия . Вам также нужно будет добавить плагин Jacoco.
Вы можете увидеть сборку Jenkins здесь:
http://ec2-75-101-221-43.compute-1.amazonaws.com:8080/job/maven-sonar-jaccoco/
Вы можете увидеть сонар построить здесь
http://ec2-75-101-221-43.compute-1.amazonaws.com:9000/dashboard/index/1
1.3 Результаты выполнения примера
- Испытания в стандартной тестовой структуре maven проводятся, как обычно, на этапе модульных испытаний.
- Тесты в каталогеtesttest выполняются на этапе тестирования интеграции.
- Классы тестов и результаты помещаются в отдельный каталог
Отчеты о тестировании Jacoco помещаются в каталог / target / охват-отчетов
В Sonar покрытие модульного теста отображается в одном виджете, а покрытие интеграционного теста — в другом.
2.0 Как это работает?
Основные шаги заключаются в следующем. Детали для каждого ниже.
- Запустите жизненный цикл интеграционных тестов maven с включенным покрытием Jacoco для модульных и интеграционных тестов.
- Запустите Sonar, указывая на результаты покрытия.
- Поместите все это в профиль, чтобы им было удобно пользоваться.
2.1 Выполнение тестов с Jacoco
Сначала мы определим каталоги для файлов покрытия jacoco.
<coverage.reports.dir> ${basedir}/target/coverage-reports </coverage.reports.dir> <sonar.jacoco.reportPath> ${coverage.reports.dir}/jacoco-unit.exec </sonar.jacoco.reportPath> <sonar.jacoco.itReportPath> ${coverage.reports.dir}/jacoco-it.exec </sonar.jacoco.itReportPath> <sonar.jacoco.jar> ${basedir}/lib/jacocoagent.jar </sonar.jacoco.jar>
Затем мы запускаем модульные тесты, запустив стандартный плагин surefire с агентом Jacoco, указывающим на $ {sonar.jacoco. reportPath} . Это используется для хранения результатов покрытия кода модульного теста.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.7.2</version> <configuration> <b><argLine> -javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath} </argLine></b> <test>**/*.java</test> </configuration> </plugin>
Для интеграционных тестов мы используем отказоустойчивый плагин и указываем агенту Jacoco на $ {sonar.jacoco. itReportPath} . Это используется для хранения результатов покрытия кода интеграционного теста.
<plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>2.8</version> <configuration> <argLine> -javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.itReportPath} </argLine> <testClassesDirectory> ${integrationOutputDirectory} </testClassesDirectory> <reportsDirectory> ${integrationOutputDirectory}/failsafe-reports </reportsDirectory> <test>**/*.java</test> <additionalClasspathElements> <additionalClasspathElement> ${integrationSourceDirectory}/resources</additionalClasspathElement> </additionalClasspathElements> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> </goals> </execution> </executions> </plugin>
Когда они будут запущены, они создадут следующие 2 файла покрытия.
Бегущий сонар
Мы используем стандартную цель sonar: sonar, но сначала компилируем и запускаем наши тесты. Это приведет к выполнению модульных и интеграционных тестов, как описано выше.
Следующий параметр говорит Sonar использовать jacoco в качестве плагина покрытия кода по умолчанию
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
Затем мы указываем Sonar повторно использовать созданные файлы покрытия.
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
Затем мы запускаем весь процесс, выполнив следующую команду Maven
mvn –Psonar,it clean install sonar:sonar
Это дает результаты, описанные выше в разделе 1.3. Результаты выполнения примеров
2.3 Использование профиля
Профиль сонара объединяет все эти части в одну единицу многократного использования. Полный профиль здесь. https://designbycontract.googlecode.com/svn/trunk/sonar/pom.xml
2.4 Следующие шаги
Вы можете посмотреть мультимодульный пример того же метода здесь: http://johndobie.blogspot.com/2011/06/maven-multi-module-with-sonar-and.html
От http://johndobie.blogspot.com/2011/06/seperating-test-code-coverage-with.html