I got following execption when i tried to run test case in junit5:
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test (default-test) on project CRUD-App: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test failed: There was an error in the forked process org.junit.platform.commons.util.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath at org.junit.platform.commons.util.Preconditions.condition(Preconditions.java:161) at org.junit.platform.launcher.core.DefaultLauncher.<init>(DefaultLauncher.java:52) at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:42) at org.junit.platform.surefire.provider.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:59) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:286) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:240) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
pom.xml
<dependencies> ... <dependency> <groupId>org.junit</groupId> <artifactId>junit5-api</artifactId> <version>5.0.0-SNAPSHOT</version> <scope>test</scope> </dependency> </dependencies> <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-M2</version> </dependency> </dependencies> </plugin> </plugins> </build>
Test Class:
public class PersonServiceTest { final Database database = Database.from("jdbc:h2:mem:" + App.DB_NAME); final PersonService personService = new PersonService(database); public PersonServiceTest() { } @Test @DisplayName("@Person#insert()") public void testInsert() { personService.insert(new PersonBuilder() .setId(1).setName("Bhuwan") .setAddress("KTM") .setContactNo("984849").createPerson() ); } }
Maven Goal: mvn test
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With