Launcher kann nicht ohne mindestens eine TestEngine erstellt werden; Erwägen Sie, dem Klassenpfad in Junit 5 eine Engine-Implementierungs-JAR hinzuzufügen
Lesezeit: 5 Minuten
Ich habe folgende Ausnahme erhalten, als ich versuchte, den Testfall in junit5 auszuführen:
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)
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-Ziel:mvn test
Sam Brannen
Mischen ALPHA Snapshot-Artefakte (d. h. org.junit:junit5-api:5.0.0-SNAPSHOT) mit M2 Artefakte (dh org.junit.platform:junit-platform-surefire-provider:1.0.0-M2), geht nicht.
Der Maven Abschnitt in der Bedienungsanleitung schlägt vor, die zu überprüfen pom.xml von dem junit5-maven-consumer Projekt. Wenn Sie diesem Beispiel folgen, erhalten Sie am Ende etwas wie das Folgende.
Zu schreiben Ihre Tests, Sie brauchen nur die junit-jupiter-api; jedoch um laufen Ihre Tests müssen Sie haben a TestEngine auf dem Klassenpfad. Für JUnit braucht man also Jupiter junit-jupiter-engine auch auf dem Klassenpfad.
Wie Nicolai Parlog betonte, könnte man hinzufügen junit-jupiter-engine als Abhängigkeit für die maven-surefire-plugin; das würde jedoch nicht beinhalten JupiterTestEngine im Klassenpfad für Ihre IDE.
Wenn Sie nur Tests über Maven oder mit einer aktuellen Beta-Version von IntelliJ 2016 (mit integrierter Unterstützung für JUnit 5) durchführen, ist es Ihnen möglicherweise egal, ob JupiterTestEngine befindet sich im Klassenpfad in Ihrer IDE. Aber … wenn Sie Eclipse, NetBeans oder eine Nicht-Beta-Version von IntelliJ verwenden, möchten Sie das auf jeden Fall JupiterTestEngine auch auf dem Klassenpfad in der IDE.
Grüße,
Sam (Core-JUnit-5-Committer)
Bin hier gelandet, seit ich mit Gradle und JUnit 4 denselben Fehler erhalten habe. Die Lösung in diesem Fall finden Sie in der Dokumente:
Die JUnit-Plattform kann JUnit 4-basierte Tests ausführen, solange Sie eine testImplementation-Abhängigkeit von JUnit 4 und eine testRuntimeOnly-Abhängigkeit von der JUnit Vintage TestEngine-Implementierung ähnlich der folgenden konfigurieren.
Das Maven Surefire Plugin benötigt nicht nur den Provider JUnit 5 sondern auch einen TestEngine Implementierung zum Ausführen von Tests. Um die zu zitieren JUnit 5-Dokumente:
Damit Maven Surefire überhaupt Tests durchführen kann, a TestEngine
-Implementierung muss dem Laufzeit-Klassenpfad hinzugefügt werden.
14445100cookie-checkLauncher kann nicht ohne mindestens eine TestEngine erstellt werden; Erwägen Sie, dem Klassenpfad in Junit 5 eine Engine-Implementierungs-JAR hinzuzufügenyes