Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath in Junit 5 Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath in Junit 5 java java

Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath in Junit 5


Mixing ALPHA snapshot artifacts (i.e., org.junit:junit5-api:5.0.0-SNAPSHOT) with M2 artifacts (i.e., org.junit.platform:junit-platform-surefire-provider:1.0.0-M2), won't work.

The Maven section in the user guide suggests to check out the pom.xml from the junit5-maven-consumer project. If you follow that example, you will end up with something like the following.

<properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <java.version>1.8</java.version>    <junit.jupiter.version>5.0.0-M2</junit.jupiter.version>    <junit.platform.version>1.0.0-M2</junit.platform.version></properties><build>    <plugins>        <plugin>            <artifactId>maven-compiler-plugin</artifactId>            <version>3.1</version>            <configuration>                <source>${java.version}</source>                <target>${java.version}</target>            </configuration>        </plugin>        <plugin>            <artifactId>maven-surefire-plugin</artifactId>            <version>2.19</version>            <dependencies>                <dependency>                    <groupId>org.junit.platform</groupId>                    <artifactId>junit-platform-surefire-provider</artifactId>                    <version>${junit.platform.version}</version>                </dependency>            </dependencies>        </plugin>    </plugins></build><dependencies>    <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter-api</artifactId>        <version>${junit.jupiter.version}</version>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter-engine</artifactId>        <version>${junit.jupiter.version}</version>        <scope>test</scope>    </dependency></dependencies>

To write your tests, you only need the junit-jupiter-api; however, in order to run your tests you must have a TestEngine on the classpath. For JUnit Jupiter you therefore need junit-jupiter-engine on the classpath as well.

As Nicolai Parlog pointed out, you could add junit-jupiter-engine as a dependency for the maven-surefire-plugin; however, that would not include the JupiterTestEngine in the classpath for your IDE.

If you're only running tests via Maven or with a recent beta version of IntelliJ 2016 (which has built-in support for JUnit 5), then you may not care if JupiterTestEngine is on the classpath in your IDE. But... if you're using Eclipse, NetBeans, or a non-beta version of IntelliJ, you'll definitely want the JupiterTestEngine on the classpath in the IDE as well.

Regards,

Sam (core JUnit 5 committer)


The Maven Surefire plugin not only needs the JUnit 5 provider but also a TestEngine implementation to run tests with. To quote the JUnit 5 docs:

In order to have Maven Surefire run any tests at all, a TestEngine implementation must be added to the runtime classpath.

In accordance with that the following works:

<build>    <plugins>                <plugin>            <artifactId>maven-surefire-plugin</artifactId>            <version>2.19</version>            <dependencies>                <dependency>                    <groupId>org.junit.platform</groupId>                    <artifactId>junit-platform-surefire-provider</artifactId>                    <version>1.0.0-M4</version>                </dependency>                <dependency>                    <groupId>org.junit.jupiter</groupId>                    <artifactId>junit-jupiter-engine</artifactId>                    <version>5.0.0-M4</version>                </dependency>            </dependencies>        </plugin>    </plugins></build><dependencies>    <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter-api</artifactId>        <version>5.0.0-M4</version>        <scope>test</scope>    </dependency></dependencies>

Note that this configuration makes the engine a dependency of the surefire plugin, not of your test code.


I solve it changing

classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.8.RELEASE"

to

classpath "org.springframework.boot:spring-boot-gradle-plugin:2.2.0.RELEASE"