Покрытие Jacoco кода модульного теста

Я конвертирую сборку ANT в Maven. Сонар не использую.

В Maven Jacoco, кажется, не сообщает о покрытии самих модульных тестов, в то время как ANT делает это. Я пытался получить это и для своей сборки Maven, но ничего не смог найти.

Кажется, я должен добавить <include> к цели prepare-agent, но я не уверен, что добавить. Я пробовал src/test/java/* и всевозможные вариации на эту тему, но ничего не работает.

Как настроить Jacoco в Maven так, чтобы он сообщал о покрытии кода модульного теста?


person jqno    schedule 09.10.2014    source источник


Ответы (1)


Оказывается, единственный способ сделать это — использовать maven-antrun-plugin.

Нет необходимости добавлять <include> к цели prepare-agent, поскольку вся информация содержится в создаваемом файле jacoco.exec, включая код модульного теста.

Однако цель report не включает его, и его также нельзя настроить для его использования. Вам нужно будет специально установить свойства classfiles и sourcefiles, а плагин Maven Jacoco не позволит вам это сделать.

Следовательно, вам нужен плагин Maven Antrun, настройте и вызовите его оттуда.

<plugins>
    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${jacoco.version}</version>
        <executions>
            <execution>
                <id>default-prepare-agent</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
                <id>default-report</id>
                <phase>package</phase>
                <goals>
                    <goal>run</goal>
                </goals>
                <configuration>
                    <target>
                        <taskdef name="report" classname="org.jacoco.ant.ReportTask" classpathref="maven.plugin.classpath" />
                        <report>
                            <executiondata>
                                <file file="${project.build.directory}/jacoco.exec" />
                            </executiondata>
                            <structure name="Coverage">
                                <classfiles>
                                    <fileset dir="${project.build.directory}/classes"/>
                                    <fileset dir="${project.build.directory}/test-classes"/>
                                </classfiles>
                                <sourcefiles encoding="UTF-8">
                                    <fileset dir="src/main/java"/>
                                    <fileset dir="src/test/java"/>
                                </sourcefiles>
                            </structure>
                            <check failonviolation="true" violationsproperty="violation">
                                <rule element="BUNDLE">
                                    <limit counter="INSTRUCTION" value="COVEREDRATIO" minimum="0.95" />
                                </rule>
                            </check>
                            <html destdir="${project.build.directory}/jacoco-internal"/>
                        </report>
                    </target>
                </configuration>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>org.jacoco</groupId>
                <artifactId>org.jacoco.ant</artifactId>
                <version>${jacoco.version}</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>
person jqno    schedule 14.10.2014