Probably not the only solution to generate a code coverage HMTL report during the maven build process, but the Emma plugin does the job. In one pass. The code is available from Github in the Code-Coverage-One-Pass directory.

Assuming the following class:
public class ClassToTest {
 
    public static int coveredMethod(int i) {
        return i + 2;
    }
 
    public static int uncoveredMethod(int i) {
        return i + 3;
    }
 
}
with the following JUnit test: 
public class ClassToTestTest {
 
    public ClassToTestTest() {
    }
 
    @Test
    public void testCoveredMethod() {
        assertEquals(4,ClassToTest.coveredMethod(2));
    }
 
}
one can configure the pom.xml as following:
<build>
 
    <plugins>
 
        <plugin>
            <groupId>org.sonatype.maven.plugin</groupId>
            <artifactId>emma-maven-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                <phase>process-classes</phase>
                <goals>
                    <goal>instrument</goal>
                </goals>
                </execution>
            </executions>
        </plugin>
 
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <classesDirectory>${project.build.directory}/generated-classes/emma/classes</classesDirectory>
            </configuration>
        </plugin>
 
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
 
        <plugin>
            <groupId>org.sonatype.maven.plugin</groupId>
            <artifactId>emma4it-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <id>instrument</id>
                    <goals>
                        <goal>instrument-project-artifact</goal>
                    </goals>
                    <configuration>
                        <appendEmma>true</appendEmma>
                    </configuration>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                    <sourceSets>
                        <sourceSet>
                        <directory>${project.build.sourceDirectory}</directory>
                        </sourceSet>
                    </sourceSets>
                    </configuration>
                </execution>
            </executions>
        </plugin>
 
    </plugins>
 
</build>
 
<dependencies>
 
    <dependency>
        <groupId>org.sonatype.maven.plugin</groupId>
        <artifactId>emma-maven-plugin</artifactId>
        <version>1.2</version>
    </dependency>
 
    ...
 
</dependencies>

It will produce an index.html file in /target/site/emma/ (always the same location, so you can keep you browser open and refresh the after each build process):

0 comments :

Post a Comment

 
Top