web-dev-qa-db-fra.com

Junit5 avec IntelliJ et Gradle

Essayer de migrer mon projet vers Java8 + Junit5 en utilisant IntelliJ 2017.2

J'ai ajouté junit-jupiter-api version 5.0.0-M6 

et junit-platform-launcher version 1.0.0-M6

La structure du projet est une convention maven par défaut src/test/Java

J'ai trouvé quelques articles à ce sujet, mais aucun d'entre eux n'a résolu mon problème.

Il fonctionne bien dans une console, je suppose que cela a quelque chose à voir avec le JUnit Runner par défaut d'IntelliJ, ou il me manque des dépendances?


Lorsque j'exécute une seule classe de test, tout fonctionne correctement, mais lorsque je sélectionne le répertoire et Run all 'Tests' in Java comme je le faisais, je rencontre peu d'erreurs.

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;

Note : Je n'ai pas encore migré de tests, ils sont tous de la syntaxe Junit 4.

13
LazerBanana

L'ajout de dépendances spécifiques résout le problème. 

NOTE: METTEZ À JOUR INTELLIJ AU-DESSUS DE 2017.2.0 COMME IL Y AVAIT UN BUG AVEC LE LANCEUR DE JUNIT

OXYGÈNE si vous utilisez Eclipse.


La dépendance ci-dessous active les tests paramétrés Junit5 qui peuvent être utilisés à la place d'un DataProvider.

"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

Nécessaire si vous souhaitez exécuter des tests JUnit4 hérités sans modifier la syntaxe et les importations.

"org.junit.vintage:junit-vintage-engine:4:12.0"
//for legacy JUnit4 tests

EDIT: 07/2018 Associe la version du pilote vintage à la version de jupiter


Nécessaire si vous souhaitez exécuter les tests JUnit5 avec une nouvelle syntaxe et des importations.

"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;


Lanceur.

"org.junit.platform:junit-platform-launcher:1.0.0
//to handle default launcher

Exception dans le fil "principal" Java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader () Ljava/lang/ClassLoader;


Informations supplémentaires comment installer JUnit5


Depuis la version 4.6 pour Gradle, les plugins ne sont plus nécessaires Gradle prend en charge Junit5 en mode natif: Et la version de Vintage Runner est maintenant identique à celle de JUnit 5.

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

La configuration que j'utilise est ci-dessous. 

La dépendance du moteur vintage n'est requise que si vous utilisez également des tests junit4.

Les paramètres jupiter ne sont requis que si vous utilisez des tests paramétrés.

<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

Une façon générale de déboguer ceci est de lancer

gradle test

sur la ligne de commande. Cela devrait donner une sortie plus verbeuse qu'IntelliJ.

0
serv-inc

pour Android studio si vous rencontrez 

Impossible de résoudre org.junit.jupiter: junit-jupiter-api

allez dans votre fichier ..\AndroidStudioProjects\Pets\app\build.gradle

à la section des dépendances

entrer ces deux lignes de code

 testImplementation 'junit:junit:4.12'
 androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0-M4'
0
Alabi Temitope