Skip to main content
Unit testing is a software development practice where individual units—such as functions, methods, or classes—are tested in isolation to ensure they behave as expected. By adopting unit tests early, teams can:
BenefitDescription
Early Defect DetectionIdentify bugs at the development stage before they propagate.
Faster Feedback LoopRun tests quickly and fix issues immediately.
Lower Maintenance CostsCatching issues early reduces expensive, late-stage fixes.
Improved Code Quality & DesignWriting tests encourages cleaner, modular code and better API design.

Running Unit Tests with Maven

In a Maven-based project, execute all unit tests with:
mvn test
Maven automatically scans src/test/java (and any additional test directories you’ve configured), runs tests, and fails the build if any test does not pass:
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[ERROR] Tests run: 3, Failures: 1, Errors: 0, Skipped: 0
[INFO] -------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] -------------------------------------------------------
[INFO] Total time:  30.123 s
[INFO] Finished at: 2024-06-15T14:22:10+00:00
[INFO] -------------------------------------------------------
By default, Maven looks for test classes matching **/*Test.java under src/test/java. You can customize this in the <build><plugins> section of your pom.xml.
A failing test will stop the Maven build. Ensure you fix or temporarily disable flaky tests to keep CI pipelines green.

Measuring Code Coverage with JaCoCo

JaCoCo is the de facto tool for generating Java code coverage reports. When integrated into Maven, it produces detailed HTML reports showing line and branch coverage.

1. Add the JaCoCo Plugin

Include the following snippet in your pom.xml under <build><plugins>:
<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.8.10</version>
  <executions>
    <execution>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>report</id>
      <phase>test</phase>
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
  </executions>
</plugin>
You can configure coverage thresholds to enforce minimum percentages. If thresholds are not met, the build will fail.

2. Generate the Report

Run your tests and generate the coverage report:
mvn clean test
After completion, open:
target/site/jacoco/index.html
to view:
  • Overall Coverage: Total percentage of covered code.
  • Per-Package/Class Breakdown: Drill down into modules.
  • Covered vs. Uncovered Lines: Visual indicators in source code.
Report SectionDescription
SummaryHigh-level percentages for lines/branches
PackagesCoverage grouped by Java packages
ClassesDetailed per-class metrics
Source CodeColor-coded, line-by-line coverage view
Thank you for reading!