it-swarm.com.de

Junit5 mit IntelliJ und Gradle

Versuch, mein Projekt mit IntelliJ 2017.2 nach Java8 + Junit5 zu migrieren

Ich 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.

13
LazerBanana

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'
    }
}
20
LazerBanana

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>
6
sweetfa

Ich muss die Version von JUnit von 5.4.0 für 5.3.2 ändern und es funktioniert wie ein Zauber.

4
André Machado

Ein allgemeiner Weg zum Debuggen ist das Ausführen

gradle test

in der Befehlszeile. Das sollte mehr ausführliche Ausgabe als IntelliJ geben.

0
serv-inc

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'
0
Alabi Temitope