Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why might Jacoco be showing a code coverage of 0?

I have below pom.xml

<plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <version>2.18</version>
             <configuration>
             <!-- Sets the VM argument line used when unit tests are run. -->
                <argLine>-Xms512m -Xmx1024m -XX:MaxPermSize=512m ${jacoco.agent.argLine}</argLine>
             </configuration>
         </plugin>
         <plugin> 
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.5.201505241946</version>
            <configuration>
                <dataFile>target/jacoco.exec</dataFile>
            </configuration>
            <executions>
                <execution>
                    <id>pre-unit-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                    <configuration>
                            <propertyName>jacoco.agent.argLine</propertyName>
                            <destFile>target/jacoco.exec</destFile>
                    </configuration>
                </execution>
               <execution>
                    <id>default-report</id>
                    <phase>test</phase>
                    <goals>
                    <goal>report</goal>
                    </goals>
                </execution>
            </executions>
         </plugin>

I am using maven-compiler-plugin v2.5.1

when I am doing clean test from Eclipse it creates the target/jacoco.exec file, once it it created I run it with jacoco:report and it creates the report as well. But the report shows all the packages with 0% code coverage except one package.

When I run the report for the same set of classes using cobertura it is showing us the code coverage correctly.

What might be the issue here?

Update

Adding my maven log:

  [INFO] Scanning for projects...
[INFO] 
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Adaptive Payment Platrom Core 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ app-core ---
[INFO] Deleting C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:prepare-agent (pre-unit-test) @ app-core ---
[INFO] jacoco.agent.argLine set to -javaagent:C:\\Users\\SHANK030\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.7.5.201505241946\\org.jacoco.agent-0.7.5.201505241946-runtime.jar=destfile=C:\\Users\\SHANK030\\git\\AdaptivePaymentPlatform\\APP_Core\\target\\jacoco.exec,excludes=com/wdpr/payment/data/vo/*.class:com/wdpr/payment/data/mapper/*.class:com/wdpr/payment/helper/provider/AbstractInitializer.class:com/wdpr/payment/helper/provider/Agent.class:com/wdpr/payment/helper/provider/AgentException.class:com/wdpr/payment/helper/provider/AgentFactory.class:com/wdpr/payment/helper/provider/CachedProperties.class:com/wdpr/payment/helper/provider/CachedPropertiesListener.class:com/wdpr/payment/helper/provider/ConnectionPoolAgent.class:com/wdpr/payment/helper/provider/ConnectionPoolUtility.class:com/wdpr/payment/helper/provider/FixedLengthFieldMessage.class:com/wdpr/payment/helper/provider/InitializerSampleImpl.class:com/wdpr/payment/helper/provider/Loader.class:com/wdpr/payment/helper/provider/PropertyHelper.class:com/wdpr/payment/helper/provider/Provider.class:com/wdpr/payment/helper/provider/StratusAck.class:com/wdpr/payment/helper/provider/StratusAuthReq.class:com/wdpr/payment/helper/provider/StratusAuthRsp.class:com/wdpr/payment/helper/provider/StratusConnection.class:com/wdpr/payment/helper/provider/StratusConnectionMgr.class:com/wdpr/payment/helper/provider/StratusConnectionReader.class:com/wdpr/payment/helper/provider/StratusConnectionUtility.class:com/wdpr/payment/helper/provider/StratusFormatException.class:com/wdpr/payment/helper/provider/StratusHeartbeat.class:com/wdpr/payment/helper/provider/StratusMessage.class:com/wdpr/payment/helper/provider/StratusShutdown.class:com/wdpr/payment/helper/provider/StratusStartup.class:com/wdpr/payment/helper/provider/StratusUtility.class:com/wdpr/payment/helper/provider/StratusWebServiceProvider.class:com/wdpr/payment/helper/provider/Timer.class:com/wdpr/payment/helper/provider/WrappedException.class:com/wdpr/payment/helper/outbound/*.class
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 30 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ app-core ---
[INFO] Compiling 129 source files to C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ app-core ---
[INFO] Compiling 71 source files to C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.18:test (default-test) @ app-core ---
[INFO] Surefire report directory: C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\surefire-reports

UPDATE

Adding the another maven log... this is after the test cases are run

    [INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ app-core ---
[INFO] Building jar: C:\Users\SHANK030\git\AdaptivePaymentPlatform\APP_Core\target\appCore.jar
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:report (default-report) @ app-core ---
[INFO] Analyzed bundle 'Adaptive Payment Platrom Core' with 68 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:08 min
[INFO] Finished at: 2015-06-04T15:28:28-05:00
[INFO] Final Memory: 51M/594M
[INFO] ------------------------------------------------------------------------
like image 581
Shantanoo K Avatar asked Oct 19 '22 10:10

Shantanoo K


2 Answers

I am using powermock in my application which does not play well with the online instrumentation performed by JaCoCo. so using the offline instrumentation and excluding some clousure classes it worked for me.

I am running the job using mvn clean verify install, below is the changed snippet of my pom.

<plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.18</version>
             <executions>
                <execution>
                    <id>default-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <systemPropertyVariables>
                            <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                        </systemPropertyVariables>
                        <forkMode>once</forkMode>
                        <argLine>-Xms1024m -Xmx2048m -XX:MaxPermSize=1024m</argLine>

                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>**/StratusAuthTemplateProviderTest.class</exclude>
                            <exclude>**/StratusBalanceInquiryTemplateProviderTest.class</exclude>
                            <exclude>**/PersistCardAuthDetailsForRefundProcessorTest.class</exclude>
                            <exclude>**/PersistCardTxnDetailsProcessorTest.class</exclude>
                            <exclude>**/StratusAuthProcessorTest.class</exclude>
                            <exclude>**/UpdateTxnStatusTest.class</exclude>
                            <exclude>**/RulesTest.class</exclude>
                            <exclude>**/SampleRulesTest.class</exclude>
                            <exclude>**/RefundUpdatePmtTxnConfirmationProcessorTest.class</exclude>
                            <exclude>**/vo/*.class</exclude>
                            <exclude>**/outbound/*.class</exclude>
                            <exclude>**/notification/*.class</exclude>
                        </excludes>
                    </configuration>
                </execution>
            </executions>
     </plugin>
     <plugin> 
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.4.201502262128</version>
        <configuration>
            <excludes>
                <exclude>com/wdpr/payment/data/mapper/*.class</exclude>
                <exclude>**/*AjcClosure?.class</exclude>
            </excludes>
        </configuration>
        <executions>
            <execution>
                <id>default-instrument</id>
                <goals>
                    <goal>instrument</goal>
                </goals>
            </execution> 
            <execution>
                <id>default-restore-instrumented-classes</id>
                <goals>
                    <goal>restore-instrumented-classes</goal>
                </goals>
            </execution>
           <execution>
                <id>default-report</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>  
            <execution>
                <id>default-check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                    <rules>
                        <rule>
                            <element>METHOD</element>
                        </rule>
                    </rules>
                </configuration>
            </execution>
        </executions>
     </plugin>
like image 90
Shantanoo K Avatar answered Oct 24 '22 15:10

Shantanoo K


Change your jacoco plugin config to

     <plugin> 
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.5.201505241946</version>
        <configuration>
            <dataFile>target/jacoco.exec</dataFile>
        </configuration>
        <executions>
            <execution>
                <id>pre-unit-test</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
                <configuration>
                        <propertyName>jacoco.agent.argLine</propertyName>
                        <destFile>target/jacoco.exec</destFile>
                </configuration>
            </execution>
           <execution>
                <id>default-report</id>
                <phase>verify</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>
        </executions>
     </plugin>

and then invoke mvn verify

Check also the output of maven, it will hint you whether jacoco was executed within your tests.

like image 20
mp911de Avatar answered Oct 24 '22 15:10

mp911de