Why might Jacoco be showing a code coverage of 0?

20,527

Solution 1

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>

Solution 2

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.

Share:
20,527
Shantanoo K
Author by

Shantanoo K

Updated on August 09, 2022

Comments

  • Shantanoo K
    Shantanoo K over 1 year

    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] ------------------------------------------------------------------------
    
  • Shantanoo K
    Shantanoo K almost 9 years
    Changed as per your suggestion and ran as clean verify from eclipse still the same issue. I have added my maven log for your reference.
  • mp911de
    mp911de almost 9 years
    prepare-agent (pre-unit-test) is executed. Can you look in the log after test execution, if you find something about jacoco?
  • Shantanoo K
    Shantanoo K almost 9 years
    added the last part of the same maven run... Can you please check