Pull to refresh

Покрытие кода для Maven проектов (code coverage)

Reading time2 min
Views11K
Структура Java проектов с использованием Maven предполагает некоторое колличество Unit-тестов.
Но одних лишь тестов мало, хочется иметь более полную информацию насколько наши тесты охватывают код.

Для этих целей есть ряд библиотек из которых я использую Emma (офф. сайт).


Конфигурация pom.xml



Первым делом добавим Emma инструментацию на наши классы после фазы compile (фаза process-classes)
<plugin>
    <groupId>org.sonatype.maven.plugin</groupId>
    <artifactId>emma-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <filters>
            <filter>+org.*</filter>
            <filter>-org.some.package.*</filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>process-classes</phase>
            <goals>
                <goal>instrument</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Как видно из примера, emma-maven-plugin поддерживает фильтрацию. Подробнее о параметрах плагина

По умолчанию, инструментированные классы создадутся в директории ${project.build.directory}/generated-classes/emma/classes.

Эту директорию следует отметить как classesDirectory для maven-surefire-plugin:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <classesDirectory>${project.build.directory}/generated-classes/emma/classes</classesDirectory>
    </configuration>
</plugin>


И последнее, добавим создание репортa на фазе test
<plugin>
    <groupId>org.sonatype.maven.plugin</groupId>
    <artifactId>emma4it-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <id>report</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <sourceSets>
                    <sourceSet>
                        <directory>${project.build.sourceDirectory}</directory>
                    </sourceSet>
                </sourceSets>
            </configuration>
        </execution>
    </executions>
</plugin>

Как результат, получим директорию target/site/emma с HTML, TXT и XML репортами.

Hudson



Устанавливаем Emma плагин (http://wiki.hudson-ci.org//display/HUDSON/Emma+Plugin) и в конфигурации проекта отмечаем Record Emma coverage report чекбокс.

Этот плагин использует coverage.xml созданный emma4it плагином.

В результате имеем графики, таблицы процента покрытий и т.д.

Пример графика (плохого):
Tags:
Hubs:
+20
Comments12

Articles

Change theme settings