Что происходит?
В моем предыдущем посте было показано, как использовать категории JUnit для простого разделения наборов тестов модулей и интеграции.
http://johndobie.blogspot.com/2012/04/unit-and-integration-tests-with-maven.html
Следующим логическим шагом является возможность просмотра показателей для каждого набора тестов.
Этот пример показывает, как это сделать, используя Jacoco и Sonar.
Код
Код для примера здесь.
|
1
2
|
svn co https://designbycontract.googlecode.com/svn/trunk/examples/maven/categories-sonarmvn clean install sonar:sonar |
сонар
Этот пример использует Sonar для отображения метрик покрытия кода. Sonar — это фанатичный инструмент с открытым исходным кодом, на который должен обратить внимание каждый.
http://www.sonarsource.org/
Для нашего примера есть пара простых изменений конфигурации, которые необходимы.
Следующая ссылка показывает, как установить Sonar и внести изменения
http://johndobie.blogspot.com/p/setting-up-sonar.html
Разделение тестовых наборов.
Этот пример использует категории JUnit для разделения наших тестов.
Мы определяем интерфейс маркера и затем применяем его к тестам, которые хотим разделить.
|
1
|
public interface IntegrationTest {} |
Категория аннотации добавлена в ваш тестовый класс. Требуется имя вашего нового интерфейса.
|
1
2
3
4
5
6
7
8
|
import org.junit.experimental.categories.Category;@Category(IntegrationTest.class)public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { }} |
Весь процесс очень прост и полностью объясняется здесь
http://johndobie.blogspot.com/2012/04/unit-and-integration-tests-with-maven.html
Анализ покрытия кода
Мы используем плагин jacoco для покрытия кода. Здесь есть обзор Jacoco.
http://johndobie.blogspot.com/2012/01/unit-test-code-coverage.html
Сначала мы определим каталоги для файлов покрытия jacoco.
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<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} . Это используется для хранения результатов покрытия кода модульного теста.
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.7.2</version><configuration> <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath},includes=com.*</argLine> <includes> <include>**/*.class</include> </includes> <excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups></configuration></plugin> |
мы игнорируем любые помеченные интеграционные тесты со следующим конфигом
|
1
|
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups> |
Настройте интеграционные тесты
Для интеграционных тестов мы используем отказоустойчивый плагин и указываем агенту Jacoco на $ {sonar.jacoco. itReportPath} . Это используется для хранения результатов покрытия кода интеграционного теста.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<plugin><plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>2.12</version> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.12</version> </dependency> </dependencies> <configuration> <groups>com.test.annotation.type.IntegrationTest</groups> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> </goals> <configuration> <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.itReportPath},includes=com.*</argLine> <includes> <include>**/*.class</include> </includes> </configuration> </execution> </executions></plugin> |
Мы также говорим плагину использовать правильные категории JUnit
|
1
2
3
|
<configuration> <groups>com.test.annotation.type.IntegrationTest</groups></configuration> |
Когда они будут запущены, они создадут следующие 2 файла покрытия.
Запустить сонар
Перед запуском сборки необходимо запустить сервер Sonar.
http://johndobie.blogspot.com/p/setting-up-sonar.html
Запуск примера
Мы можем запустить весь лот, используя следующую команду
|
1
|
mvn clean install sonar:sonar |
Вы увидите следующие результаты, если перейдете к своему экземпляру сонара.
Ссылка: Простое покрытие кода блока и интеграции от нашего партнера JCG Джона Доби в блоге Agile Engineering Techniques .



.jpg)