IntelliJ 2017.2
nach Java8 + Junit5 zu migrierenIch habe junit-jupiter-api
Version 5.0.0-M6
hinzugefügt.
und junit-platform-launcher
version 1.0.0-M6
Die Projektstruktur ist eine Standardkonvention für Maven src/test/Java
Ich habe ein paar Artikel darüber gefunden, aber keiner von ihnen hat mein Problem gelöst.
Es läuft gut in einer Konsole, ich nehme an, das hat etwas mit dem IntelliJ-Standard-JUnit Runner zu tun, oder fehlen mir einige Abhängigkeiten?
Wenn ich eine einzelne Testklasse ausführe, funktioniert alles einwandfrei, aber wenn ich das Verzeichnis und Run all 'Tests' in Java
auswähle, stelle ich einige Fehler fest.
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V
Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;
Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V
Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;
Hinweis : Ich habe noch keine Tests migriert, alle sind Junit 4-Syntax.
Durch Hinzufügen bestimmter Abhängigkeiten wird das Problem gelöst.
HINWEIS: AKTUALISIEREN SIE INTELLIJ ÜBER 2017.2.0, WÄHREND EINEN FEHLER MIT DEM JUNIT LAUNCHER
OXYGEN, wenn Sie Eclipse verwenden.
Unterhalb der Abhängigkeit werden durch Junit5 parametrisierte Tests aktiviert, die anstelle eines DataProvider verwendet werden können.
"org.junit.jupiter:junit-jupiter-params:5.0.0"
//for JUnit5 parametrized tests.
Junit5 API.
"org.junit.jupiter:junit-jupiter-api:5.0.0"
//JUnit5 API
Wird benötigt, wenn Sie ältere JUnit4 -Tests ausführen möchten, ohne die Syntax und den Import zu ändern.
"org.junit.vintage:junit-vintage-engine:4:12.0"
//for legacy JUnit4 tests
EDIT: 07/2018 Passen Sie die Version des Vintage Runner an die Jupiter-Version an.
Wird benötigt, wenn Sie JUnit5 -Tests mit neuer Syntax und Importen ausführen möchten.
"org.junit.jupiter:junit-jupiter-engine:5.0.0"
//for JUnit5 tests
Java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType (Ljava/lang/Class;) Ljava/util/List;
Startprogramm.
"org.junit.platform:junit-platform-launcher:1.0.0
//to handle default launcher
Ausnahme im Thread "main" Java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader () Ljava/lang/ClassLoader;
Zusätzliche Informationen zur Installation von JUnit5
Seit Version 4.6 für Gradle sind keine Plugins mehr erforderlich Gradle unterstützt Junit5 nativ einfach: Die Version des Vintage-Runners ist jetzt dieselbe wie die JUnit 5-Version.
dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junitVersion"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
}
test {
useJUnitPlatform {
includeEngines 'junit-jupiter', 'junit-vintage'
}
}
Die Konfiguration, die ich verwende, ist unten.
Die Vintage-Engine-Abhängigkeit ist nur erforderlich, wenn Sie auch Junit4-Tests verwenden.
Die Jupiter-Parameter werden nur benötigt, wenn parametrisierte Tests verwendet werden.
<properties>
<junit.version>5.0.0</junit.version>
</properties>
...
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>4.12.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
Ich muss die Version von JUnit von 5.4.0 für 5.3.2 ändern und es funktioniert wie ein Zauber.
Ein allgemeiner Weg zum Debuggen ist das Ausführen
gradle test
in der Befehlszeile. Das sollte mehr ausführliche Ausgabe als IntelliJ geben.
für Android Studio, wenn Sie begegnen
Org.junit.jupiter kann nicht aufgelöst werden: junit-jupiter-api
gehe zu deiner Datei ..\AndroidStudioProjects\Pets\app\build.gradle
bei den Abhängigkeiten
geben Sie diese beiden Codezeilen ein
testImplementation 'junit:junit:4.12'
androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0-M4'