Тестовое покрытие для модульных тестов Powermock и JMockit

Кто-нибудь смог получить модульное тестирование модульных тестов JMockit и Powermock, работающих в JaCoCo, из сборки Maven?

У меня есть набор модульных тестов Powermock, который я хотел бы постепенно перенести на JMockit. Но мне нужно иметь возможность видеть тестовое покрытие всех юнит-тестов в одном отчете, желательно в Sonar.

Я запустил тесты JMockit и Powermock вместе с Surefire / JaCoCo, переведя JaCoCo в «автономный» режим (в противном случае у меня была проблема, когда один из агентов не завершался в конце тестов, а затем mvn clean< /strong> не удалось удалить сгенерированный файл target\surefire\surefirebooter2967126910681005991.jar при следующем запуске). Но для тестов JMockit не было создано покрытия.

Пожалуйста, опубликуйте некоторые выдержки из вашего pom, если у вас это работает.

Вот как выглядит мой pom (обратите внимание, что плагин surefire настроен с reuseForks=false для обхода утечки памяти PermGen в Powermock, это одна из основных причин перехода на JMockit)

        <profile>
        <!-- use this profile to perform Sonar analysis -->
        <id>sonar</id>
        <properties>
            <sonar.language>java</sonar.language>
            <!-- Tells Sonar to use the generated test coverage report -->
            <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
            <!-- Tells Sonar to use JaCoCo as the code coverage tool -->
            <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
            <sonar.java.codeCoveragePlugin>jacoco</sonar.java.codeCoveragePlugin>
        </properties>
        <build>
            <plugins>
                <!-- surefire (junit) plugin config with JaCoCo listener -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.16</version>
                    <configuration>
                        <!-- note: use single JVM to append to JaCoCo coverage file -->
                        <forkCount>1</forkCount>
                        <reuseForks>false</reuseForks>
                        <argLine>-XX:MaxPermSize=256m </argLine>
                        <systemPropertyVariables>
                            <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                        </systemPropertyVariables>
                    </configuration>
                </plugin>

                <!-- JaCoCo (Sonar) plugin config-->
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.6.3.201306030806</version>
                    <executions>
                        <execution>
                            <id>instrument</id>
                            <phase>process-classes</phase>
                            <goals>
                                <goal>instrument</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>restore</id>
                            <phase>site</phase>
                            <goals>
                                <goal>restore-instrumented-classes</goal>
                                <goal>report</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>check</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <configuration>
                                <rules>
                                    <rule>
                                        <element>BUNDLE</element>
                                        <limits>
                                            <limit>
                                                <counter>COMPLEXITY</counter>
                                                <value>COVEREDRATIO</value>
                                                <minimum>0.0</minimum>
                                            </limit>
                                        </limits>
                                    </rule>
                                </rules>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <append>true</append>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

person Justin Rowe    schedule 25.09.2013    source источник


Ответы (1)


Либо инструментальные классы были переданы после неинструментированных в пути к классам, либо файл jacoco agent.jar не был добавлен в тестовый путь к классам.

Чтобы проверить обе возможности, проверьте, где у вас есть инструментальные классы, запустите mvn с флагом -X и проверьте путь к классам для выполнения теста (чтобы увидеть порядок элементов пути к классам и если агент jacoco находится на пути к классам.)

person Grzesuav    schedule 22.10.2014