How do I run JUnit 5 integration tests with the Maven Failsafe plugin?
Edit: This answer was correct before maven-failsafe-plugin:2.22.0
. See davidxxx's answer for the ideal and most up to date solution.
The maven-failsafe-plugin
currently doesn't support JUnit 5, out of the box.
However, like with maven-surefire-plugin
, you can run JUnit 5 tests with the maven-failsafe-plugin
by specifying the dependency on the org.junit.platform:junit-platform-surefire-provider:1.0.1
with the earlier version of the maven-failsafe-plugin:2.19.1
.
It doesn't work with the current version 2.20 of the failsafe (in the same way that the surefire has the error) due to an OutOfMemory
error.
See the below for an example of the configuration of the plugin:
<properties>
<junit.platform.version>1.0.1</junit.platform.version>
</properties>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>${junit.platform.version}</version>
</dependency>
</dependencies>
</plugin>
You can find a full example of this working (and a failing one) on GitHub. To test that it works, you can run mvn clean failsafe:integration-test
.
Note that from the JUnit 5 documentation : junit-platform-surefire-provider
should be not used any longer :
Due to the release of Surefire
2.22.0
, thejunit-platform-surefire-provider
from the JUnit team has been deprecated and will be discontinued in a subsequent release of the JUnit Platform.
Additionally, you can also read in the maven-surefire-plugin
documentation :
Using JUnit 5 Platform
To get started with JUnit Platform, you need to add at least a single
TestEngine
implementation to your project. For example, if you want to write tests with Jupiter, add the test artifactjunit-jupiter-engine
to the dependencies in POM
So you have to specify this test
dependency :
<properties>
<junit-jupiter.version>5.2.0</junit-jupiter.version>
</properties>
<dependencies>
[...]
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
[...]
</dependencies>
And the maven-failsafe-plugin
declaration could be as simple as :
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</build>