В этом примере я расширю свой предыдущий пример хранения ваших модульных и интеграционных тестов в отдельных пакетах и объясню, как также получать статистику покрытия кода.
Для этого я продолжаю использовать 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



