Jacoco Maven Plugin Junit Code Coverage Example
This tutorial guides you on how to use Jacoco Maven Plugin to generate code coverage for Junit Tests written in the Java Project. Jacoco is an opensource project used to check how many lines of your code is unit tested.
Jacoco Maven Plugin Junit Code Coverage Example
Let’s create a sample Java Maven Project in Eclipse and modify your pom.xml. Make sure that you have added Jacoco Maven Plugin and Junit Jupiter API dependency as shown below.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <version>0.0.1-SNAPSHOT</version> <groupId>com.sneppets</groupId> <artifactId>jacaco</artifactId> <name>jacaco</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.3.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>maven-jacaco-coverage</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.2</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> <execution> <id>jacoco-check</id> <goals> <goal>check</goal> </goals> <configuration> <rules> <rule> <element>PACKAGE</element> <limits> <limit> <counter>LINE</counter> <value>COVEREDRATIO</value> <minimum>0.9</minimum> </limit> </limits> </rule> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
The above pom.xml Jacoco plugin configuration will generate Jacoco report during Maven test phase.
Sample Junit test for Jacaco Code Coverage
Let’s write sample application code (Message.java) under src/main/java for which we need to write junit tests.
Message.java
package com.sneppets.jacaco; public class Message { public String getMessage(String msg) { StringBuilder sb = new StringBuilder(); if(msg == null || msg.trim().length() == 0) { sb.append("please enter message"); }else { sb.append("Thank you, " + msg); } return sb.toString(); } }
After writing application logic, now let’s write junit test for the above logic. And make sure that you create test class under src/test/java.
TestMessage.java
package com.sneppets.jacaco; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; public class TestMessage { @Test public void testMessageRosy() { Message obj = new Message(); assertEquals("Thank you, Rosy", obj.getMessage("Rosy")); } @Test public void testMessageEmpty() { Message obj = new Message(); assertEquals("please enter message", obj.getMessage("")); } }
Finally, its time to run mvn test and check the Jacoco code coverage report that will be generated.
Maven Unit Test Code Coverage using Jacoco
Let’s run mvn test command as shown below.
>mvn clean test [INFO] Scanning for projects... [INFO] [INFO] ------------------------< com.sneppets:jacaco >------------------------- [INFO] Building jacaco 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ jacaco --- [INFO] Deleting C:\Users\sneppets\Documents\Workspaces\Java\jacaco\target [INFO] [INFO] --- jacoco-maven-plugin:0.8.2:prepare-agent (default) @ jacaco --- [INFO] argLine set to -javaagent:C:\\Users\\sneppets\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\>mvn clean test [INFO] Scanning for projects... [INFO] [INFO] ------------------------< com.sneppets:jacaco >------------------------- [INFO] Building jacaco 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ jacaco --- [INFO] Deleting C:\Users\sneppets\Documents\Workspaces\Java\jacaco\target [INFO] [INFO] --- jacoco-maven-plugin:0.8.2:prepare-agent (default) @ jacaco --- [INFO] argLine set to -javaagent:C:\\Users\\sneppets\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.8.2\\org.jacoco.agent-0.8.2-runtime.jar=destfile=C:\\Users\\sneppets\\Documents\\Workspaces\\Java\\jacaco\\target\\jacoco.exec --------------- -------------- [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.sneppets.jacaco.TestMessage [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.06 s - in com.sneppets.jacaco.TestMessage [INFO] [INFO] Results: [INFO] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- jacoco-maven-plugin:0.8.2:report (jacoco-report) @ jacaco --- [INFO] Loading execution data file C:\Users\sneppets\Documents\Workspaces\Java\jacaco\target\jacoco.exec [INFO] Analyzed bundle 'jacaco' with 1 classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.263 s [INFO] Finished at: 2022-02-05T15:30:27+05:30 [INFO] ------------------------------------------------------------------------.8.2\\org.jacoco.agent-0.8.2-runtime.jar=destfile=C:\\Users\\sneppets\\Documents\\Workspaces\\Java\\jacaco\\target\\jacoco.exec --------------- -------------- [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.sneppets.jacaco.TestMessage [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.06 s - in com.sneppets.jacaco.TestMessage [INFO] [INFO] Results: [INFO] [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- jacoco-maven-plugin:0.8.2:report (jacoco-report) @ jacaco --- [INFO] Loading execution data file C:\Users\sneppets\Documents\Workspaces\Java\jacaco\target\jacoco.exec [INFO] Analyzed bundle 'jacaco' with 1 classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.263 s [INFO] Finished at: 2022-02-05T15:30:27+05:30 [INFO] ------------------------------------------------------------------------
Note, once you see build is success, you need to check for the Jacoco code coverage report under target/site/jacoco/index.html. Try to open that index.html file to check for the code coverage in any browser.
Also, it is evident that we have covered unit tests for all the methods and lines from the below picture.
That’s it. you had learnt how to write Junit tests and get code coverage report using Jacoco Maven Plugin.
Hope this article is helpful 🙂
You’ll also like:
- Spring Boot App Program Error: Could not find or load main class
- Build maven project without version
- Assign value to static variables from application.properties in Spring Boot ?
- Create JWT Token and Sign with RSA Private Key
- Replace element in ArrayList at specific index
- Convert Integer List to int array
- ArrayList removeAll() method not removing elements
- Convert floating point number to fixed point in Python
- What is %matplotlib inline and how to use ?
- Java String substring() example program
- How to change the default theme in Jupyter Notebook ?
- Websocket connection closed automatically – keepalive Ping example
- Check if a file or folder exists without getting exceptions ?
- Python program to find the greatest of three numbers
- Putty Fatal Error No supported authentication methods available
- Find which users belongs to a specific group in linux
- Check if Python Object is a Number ?
- Remove non-numeric characters from string in Python
- Convert negative to positive number in Python
- Extract numbers from a string in python
- Program to Check Given Number is Odd or Even
- Setup Proxy – OkHttpClient Proxy Settings
References:
Â