Maven - How to skip unit tests in Java


Sometimes unit tests seem placed there from a fellow developer that abandoned the company only to bother us when we have to quickly release a simple change.

I still remember a project that nobody wanted to touch, the code was developed by an external company.

To add 1 line of productive code I had to reverse engineering the test code that was a giant black box and required 100 (!!!) lines of change.

What to do if we want quickly skip maven tests to test-drive an 'unofficial' new feature.

Option 1: Don't build the tests

Setting this parameter Maven won't compile the tests.

-Dmaven.test.skip=true or -Dmaven.test.skip

You can add it to your maven build with:

<properties> 
    <maven.test.skip>true</maven.test.skip> 
</properties> 

or you can use it directly in the command line:

$ mvn package -Dmaven.test.skip=true

Option 2: Surefire plugin - build the tests but don't execute them

This seems to be the first solution we try when we want to skip the tests (maybe because we have to type less), but often we have errors because even in absence of execution the tests are compiled, besides this instruction requires the Surefire plugin.

mvn install -DskipTests

You can add it to your project:

<project> 
  [...] 
  <build> 
    <plugins> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>${surefire.version}</version> 
        <configuration> 
          <skipTests>true</skipTests> 
        </configuration> 
      </plugin> 
    </plugins> 
  </build> 
</project> 

Surefire plugin: skip compiling the tests

This is equivalent to the first solution, the tests are not build or executed.

mvn install -Dmaven.test.skip=true

Deep dive

Surefire gives you a lot of control in the management of the tests. You can run only one test or exclude some test according to a pattern.

If you are implementing a testing strategy for your Java project it's worth to look at the Surefire examples: https://maven.apache.org/surefire/maven-surefire-plugin/



WebApp built by Marco using SpringBoot, Java 17, Mustache, Markdown and in Azure