Why might Jacoco be showing a code coverage of 0?
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.
Shantanoo K
Updated on August 09, 2022Comments
-
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 almost 9 yearsChanged 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 almost 9 yearsprepare-agent (pre-unit-test) is executed. Can you look in the log after test execution, if you find something about jacoco?
-
Shantanoo K almost 9 yearsadded the last part of the same maven run... Can you please check