Ich habe mit JUnit 5 eine einfache Testmethode geschrieben:
public class SimlpeTest {
@Test
@DisplayName("Some description")
void methodName() {
// Testing logic for subject under test
}
}
Aber wenn ich renne mvn test
, bekomme ich:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Irgendwie hat todsicher diese Testklasse nicht erkannt. Mein pom.xml
sieht aus wie:
<properties>
<java.version>1.8</java.version>
<junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
Irgendeine Idee, wie das funktioniert?
Antworten:
Das
maven-surefire-plugin
hat bis heute keine volle Unterstützung für JUnit 5 . Es gibt ein offenes Problem beim Hinzufügen dieser Unterstützung in SUREFIRE-1206 .Daher müssen Sie einen benutzerdefinierten Anbieter verwenden . Eine wurde bereits vom JUnit-Team entwickelt. Im Benutzerhandbuch müssen Sie den
junit-platform-surefire-provider
Anbieter und dieTestEngine
Implementierung für die neue API hinzufügen :Stellen Sie außerdem sicher, dass Sie die
junit-jupiter-api
Abhängigkeit mit folgendem Umfang deklarierentest
:quelle
maven-surefire-plugin v2.21.0
funktioniert gut mitjunit-jupiter-engine v5.2.0
undjunit-platform-surefire-provider v1.2.0
Update 2
Problem Problem wurde im Maven Surefire Plugin v2.22.0 behoben
Die neue Version ist im Maven Central Repository verfügbar.
Maven
Gradle
Aktualisieren
Wie Marian betonte, unterstützt die neueste Version von JUnit 5 Platform Surefire Provider (1.2.0) die neueste Version des Maven Surefire Plugins (2.21.0) :
Beispiel
pom.xml
TestScenario.java
Ausgabe (mvn Neuinstallation)
Einfachster Weg bis heute:
quelle
Aus der JUnit 5-Dokumentation :
Zusätzlich können Sie in der
maven-surefire-plugin
Dokumentation lesen :Genau das reicht aus, um JUnit 5-Tests auszuführen:
In meinem GitHub-Bereich habe ich ein funktionierendes Beispiel-Maven-Projekt hinzugefügt, das Sie durchsuchen / klonen können.
URL: https://github.com/ebundy/junit5-minimal-maven-project
quelle
Ich bin auf dieses Problem mit JUnit5 und Maven gestoßen, habe aber auch festgestellt, dass, selbst wenn nur die Junit-Jupiter-Engine als Abhängigkeit hinzugefügt wurde, Tests für einige Projekte ausgeführt werden, nicht für andere . Und ich sehe das gleiche Muster in den Kommentaren hier: In @Alex Kommentar oben können Sie sehen, dass er kein Problem hat, selbst mit früheren Versionen von todsicher / junit / Plattform.
Kopf für einige Zeit nach dem Kratzen wurde mir klar , dass diese Projekte , bei denen die Tests nicht ausgeführt würden diejenigen waren , wo die Tests Methode Namen dit nicht das Wort „Test“ enthalten. Dies wird jedoch nicht von http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html vorgeschrieben
Mit anderen Worten: nur mit
Dies
wird NICHT ausgeführt, wohingegen
WIRD laufen!
Diese Ausgabe entfaltet sich als russische Puppe ...
Wie auch immer, +1 für @Mikhail Kholodkov, dessen aktualisierte Antwort alle Probleme auf einmal behebt!
quelle
Als Ergänzung funktioniert auch das todsichere 2.22.0 + Junit 5.2.0 + Plattform 1.2.0. Im Anhang finden Sie einen funktionierenden Pom für Ihren Schiedsrichter:
quelle
junit-vintage-engine
als Abhängigkeit, und alle meine Tests für JUnit wurden geschrieben 4.Im August 2019 stieß ich auf dasselbe Problem, nach dem ich hier gefragt habe: Maven findet lautlos keine JUnit-Tests zum Ausführen . Diese Antworten haben mich in die richtige Richtung geführt, aber ich habe festgestellt, dass Sie das Problem noch präziser lösen können. Ich habe meine Lösung aus dem JUnit5-Beispielprojekt Maven kopiert .
Ab JUnit 5.5.1 und
maven-surefire-plugin
2.22.2 müssen Sie diejunit-platform-surefire-provider
Abhängigkeit nicht mehr hinzufügen . Es reicht aus, diese eine Abhängigkeit und ein Plugin in Ihrempom.xml
:quelle
In meinem Fall lag dies am TestNG im Klassenpfad ( SUREFIRE-1527 ). Groovy 2.5.5 POM hat es mit dem
groovy-testng
Modul gebracht.Der manuell angegebene Test-Framework-Anbieter (wie unter https://maven.apache.org/surefire/maven-surefire-plugin/examples/providers.html beschrieben ) löste das Problem:
quelle
<dependency>
In<dependencies>
in Ihr Codebeispiel einschließen.Es gibt ein offenes Problem für todsichere 2.20
Es funktioniert bei mir mit Surfire 2.19 + Junit-Plattform- * 1.0.3
quelle
Ich hatte ein ähnliches Problem, das auch dazu führte, dass Surefire keine Tests erkannte.
Es stellte sich heraus, dass mein Problem mit Folgendem zusammenhängt (aus der JUnit 5.1.0 / maven- Dokumentation):
Ich habe versucht, die neuesten Versionen von Surefire (2.21.0) und Junit-Platform-Surefire-Provider (1.1.0) zu verwenden, und es hat nicht funktioniert (weder in Java 8 noch in Java 9).
Das Zurückschalten auf Surefire 2.19.1 hat mein Problem gelöst.
Entsprechend diesem Problem wird ein Fix in Version 1.2.0 des Junit-Platform-Surefire-Providers enthalten sein (derzeit nur als SNAPSHOT verfügbar).
quelle
Eines ist mir aufgefallen, dass ich es zum Laufen bringen konnte:
ClinicCalendarShould
Testklasse wird von Maven nicht erfasstClinicCalendarTest
Testklasse wird von Maven abgeholtSofern mir keine Konfiguration oder Parameter oder was auch immer im todsicheren Plugin fehlt, müssen Sie Ihre Testklassen standardmäßig XXXTest benennen.
quelle
Durch das Aktualisieren werden
maven-surefire-plugin:2.20
die Junit5-Tests problemlos ausgeführt.Aber ich benutze die
M6
Version auf Junit5.quelle
In meinem Fall hat das todsichere Plugin nicht die richtige Version auf der Jupiter-Engine / API erhalten. Und das war sogar, wenn Maven 3.6.1 und surefireplugin Version 2.22.2 ausgeführt wurde!
Jetzt sieht meine todsichere Plugin-Konfiguration so aus:
Außerdem musste ich diese Versionen erzwingen:
Es sieht so aus, als ob 5.5.2 in meinem Fall mit der falschen Plattformversion 1.3.2 anstelle von 1.5.2 verknüpft war.
Alle JUnit5-Tests werden jetzt abgeholt. Selbst mit 2.22.0 des todsicheren Plugins war dies bei mir nicht der Fall!
Hoffentlich hilft das...
quelle
Ich hatte beide das gleiche Problem
junit5
und diemaven-surefire
Tests schlugen fehl. Liefjunit4
jedoch gut. Die folgende Kombination hat bei mir funktioniert, ich füge die Versionierung nicht hinzu. Verwendungjunit-bom
für das Abhängigkeitsmanagement. Verwenden vonspring-boot
2.1.4
Stellen Sie sicher, dass Sie auf die neueste Version von Eclipse aktualisieren
quelle