This article is part the Maven Plugins series:
Maven Surefire Plugin is used during the
test phase of the build
lifecycle to execute the unit tests of an application. It can be used with
JUnit, TestNG or other testing frameworks. In this article, I’ll explain what is
Surefire plugin and its common use cases.
Without any configuration, Surefire plugin can already be triggered by Maven. However, if you want to benefit the latest features, you need to update the plugin in you POM:
By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns, and execute them as unit tests:
||Includes all of its subdirectories and all Java filenames that start with “Test”.|
||Includes all of its subdirectories and all Java filenames that end with “Test”.|
||Includes all of its subdirectories and all Java filenames that end with “Tests”.|
||Includes all of its subdirectories and all Java filenames that end with “TestCase”.|
Using JUnit 4
In this section, we will talk about how to write and run JUnit 4 tests. The first step is to add JUnit as Maven dependency:
Then, write your tests as follows in test source directory (
class name, make sure it matches the testing patterns mentioned before, so
Test, ends with
Test or any other matching pattern. As for the
assertion methods, use those in class
org.junit.Assert. IDEs might propose
methods in class
junit.framework.Assert, please don’t use them, they are
Finally, trigger the Maven build. Any command which invokes phase
work, for example:
mvn clean install mvn clean test
Using JUnit 5
Now, let’s take a look how to write and run JUnit 5 tests. As before, the first step is to add JUnit 5 as Maven dependency. This will pull all required dependencies:
Then, write your tests in Java. Note that the import statements have been
changed. Assertion methods are now in class
Compared to JUnit 4, JUnit 5 provides more ways to write assertions. They are not covered in this article. For more information about JUnit 5 in Maven Surefire Plugin, please visit the official documentation page: Maven - Using JUnit 5 Platform.
After test execution, Maven Surefire Plugin generates reports in two different file formats:
- Plain text files (
- XML files (
By default, these files are generated in
These files are useful for tracking the execution logs, having exception stack
trace, execution statistics and more. Some CI platforms, like Jenkins, might read
Surefire reports to provide information in their UI.
Skip tests can be done by providing property
skipTests. You can do it in
Maven POM, or from command line.
From command line:
When this flag is set, Maven Surefire Plugin will be triggered without running tests. The output looks like:
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ maven-surefire-junit4 --- [INFO] Tests are skipped.
Running a Single Test
Running a single test case (a single class):
mvn -Dtest=MyTest test
Running test methods of a single test case:
mvn -Dtest=MyTest#testOne test mvn -Dtest=MyTest#test* test mvn -Dtest=MyTest#testOne+testTwo test
For more information, see official documentation page Maven - Running a Single Test.
In this post, we learnt Maven Surefire Plugin, a plugin for unit tests execution in Maven. We saw the unit tests discovery mechanism, JUnit 4 integration and JUnit 5 integration, test reports generation, how to skip tests and how to run a single test. As usual, the source code is available on GitHub: mincong-h/maven-surefire-plugin-demo.
Hope you enjoy this article, see you the next time!