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.
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'
}
}
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>
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.
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'