Surefire is not picking up Junit 5 tests Surefire is not picking up Junit 5 tests java java

Surefire is not picking up Junit 5 tests


The maven-surefire-plugin, as of today, does not have full support of JUnit 5. There is an open issue about adding this support in SUREFIRE-1206.

As such, you need to use a custom provider. One has already been developed by the JUnit team; from the user guide, you need to add the junit-platform-surefire-provider provider and the TestEngine implementation for the new API:

<build>  <plugins>            <plugin>      <artifactId>maven-surefire-plugin</artifactId>      <!-- latest version (2.20.1) does not work well with JUnit5 -->      <version>2.19.1</version>      <dependencies>        <dependency>          <groupId>org.junit.platform</groupId>          <artifactId>junit-platform-surefire-provider</artifactId>          <version>1.0.3</version>        </dependency>        <dependency>          <groupId>org.junit.jupiter</groupId>          <artifactId>junit-jupiter-engine</artifactId>          <version>5.0.3</version>        </dependency>      </dependencies>    </plugin>  </plugins></build>

Also, be sure to declare the junit-jupiter-api dependency with a scope of test:

<dependencies>  <dependency>    <groupId>org.junit.jupiter</groupId>    <artifactId>junit-jupiter-api</artifactId>    <version>5.0.3</version>    <scope>test</scope>  </dependency></dependencies>


Update 2

Issue has been fixed in Maven Surefire Plugin v2.22.0

New version is available at Maven Central Repository.

Maven

<dependency>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-surefire-plugin</artifactId>    <version>2.22.0</version></dependency>

Gradle

compile group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.0'

Update

As Marian pointed out, the latest version of JUnit 5 Platform Surefire Provider (1.2.0) supports latest version of Maven Surefire Plugin (2.21.0):

        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-surefire-plugin</artifactId>            <version>2.21.0</version>            <dependencies>                <dependency>                    <groupId>org.junit.platform</groupId>                    <artifactId>junit-platform-surefire-provider</artifactId>                    <version>1.2.0</version>                </dependency>            </dependencies>        </plugin>



Example

pom.xml

<dependencies>    <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter-engine</artifactId>        <version>5.2.0</version>        <scope>test</scope>    </dependency></dependencies><build>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-surefire-plugin</artifactId>            <version>2.21.0</version>            <dependencies>                <dependency>                    <groupId>org.junit.platform</groupId>                    <artifactId>junit-platform-surefire-provider</artifactId>                    <version>1.2.0</version>                </dependency>            </dependencies>        </plugin>    </plugins></build>

TestScenario.java

package test;import org.junit.jupiter.api.Assertions;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;public class TestScenario {    @Test    @DisplayName("Test 2 + 2 = 4")    public void test() {        Assertions.assertEquals(4, 2 + 2);    }}

Output (mvn clean install)

...
[INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ test --- [INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running test.TestScenario
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s - in test.TestScenario
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
...


Simplest way till today:

    <plugin>        <artifactId>maven-surefire-plugin</artifactId>        <version>2.19.1</version>        <dependencies>            <dependency>                <groupId>org.junit.platform</groupId>                <artifactId>junit-platform-surefire-provider</artifactId>                <version>1.1.0</version>            </dependency>        </dependencies>    </plugin>


From the JUnit 5 documentation :

Starting with version 2.22.0, Maven Surefire provides native support for executing tests on the JUnit Platform.

Additionally you can 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 artifact junit-jupiter-engine to the dependencies in POM

So just that is enough to make run JUnit 5 tests :

<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>    <groupId>davidxxx</groupId>    <artifactId>minimal-pom-junit5</artifactId>    <version>0.0.1-SNAPSHOT</version>    <properties>        <junit-jupiter.version>5.2.0</junit-jupiter.version>         <!--optional below but good practice to specify our java version-->        <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>${junit-jupiter.version}</version>            <scope>test</scope>        </dependency>        <!--optional below -->        <!-- add any JUnit extension you need such as -->        <dependency>            <groupId>org.junit.jupiter</groupId>            <artifactId>junit-jupiter-params</artifactId>            <version>${junit-jupiter.version}</version>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <artifactId>maven-surefire-plugin</artifactId>                <version>2.22.0</version>            </plugin>        </plugins>    </build></project>

On my GitHub space I added a working sample maven project that you can browse/clone.
URL: https://github.com/ebundy/junit5-minimal-maven-project