Le problème
Chaque fois que j'exécute mes projets JUnit test (en utilisant JUnit 5 avec Java 9 et Eclipse Oxygen 1.a), je rencontre le problème qu'éclipse ne trouve aucun test.
La description
Dans la configuration d'exécution, eclipse ne peut même pas trouver la méthode qui est annotée avec @Test, mais à la place ne me montre que " (toutes les méthodes) ". J'espère que l'image suivante donne un meilleur aperçu de ma configuration:
Sortie de la console:
java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more
Ce que j'ai essayé jusqu'à présent
J'ai déjà essayé
- pour supprimer le dossier de test du chemin de construction et l'ajouter à nouveau.
- pour démarrer le test en survolant la méthode annotée avec @Test puis cliquez sur "Exécuter en tant que test JUnit".
- supprimer JUnit de Buildpath et l'ajouter à nouveau
- redémarrer eclipse
- J'ai également déplacé l'ensemble du projet d'une machine à une autre et l'ai essayé avec l'installation d'éclipse fournie.
- pour renommer la méthode de test.
- pour retaper l'annotation @Test
Certaines de ces étapes peuvent être trouvées ici , mais à la fin le problème est resté.
Réponses:
Vous avez rencontré le bogue Eclipse 525948 qui a déjà été corrigé et qui sera publié dans la prochaine version Oxygen.3 (4.7.3), le 21 mars 2018.
Pour contourner ce problème, placez votre code de test dans un projet distinct et ajoutez le projet sous test au chemin d'accès au module, mais n'ajoutez pas de
module-info.java
à votre projet de test. Avec la dénomination de votre projet, classe et module, cela devrait ressembler à ceci:Voir aussi ma vidéo qui montre Java 9 et JUnit 5 dans Eclipse Oxygen.1a en action
la source
module-info.java
). Dans Eclipse, un projet Java a un seul dossier de sortie et pour cela, il ne peut en contenir qu'un ou aucunmodule-info.java
. Mais vous pouvez ajouter des modules au modulepath du projet même si le projet n'est pas modulaire (n'en a pasmodule-info.java
).J'ai résolu le problème en cliquant avec le bouton droit sur le test et en sélectionnant «Exécuter les configurations» et en modifiant la sélection «Test runner:» en «JUnit 4» comme indiqué ici:
J'ai refait le test et cela a fonctionné.
la source
J'ai le même problème avec STS 3.9.1. Cela semble être un bogue Eclipse, cependant, pour résoudre ce problème, vous pouvez ajouter une dépendance de test
junit-platform-launcher
à votre projet ( https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher )Voici comment j'ai fait pour mon projet qui utilise gradle:
dependencies { // other stuff here testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "5.${junit5MinorVersion}" testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: "1.${junit5MinorVersion}" }
Fichier gradle.properties:
junit5MinorVersion=1.0
Je pense que la même chose s'applique si vous voyez cette exception lors de l'utilisation d'IntelliJ IDEA.
la source
build.gradle
. Si vous utilisez maven, c'estpom.xml
. Le format de maven est cependant différent.Dans mon cas, le problème était moi-même et aucun IDE comme Eclipse. J'ai importé la classe JUnit 4 Test.
Alors n'importez PAS celui-ci:
import org.junit.Test // JUnit 4
Mais importez celui-là:
import org.junit.jupiter.api.Test // JUnit 5
la source
Les réponses jusqu'à présent n'ont pas abordé le problème du partage de code avec d'autres personnes qui n'utilisent pas nécessairement Eclipse. Voici une proposition. La clé est d'utiliser un profil maven pour résoudre le cas Eclipse.
Cela suppose que vous avez défini une propriété
junit5.version
dans votre pom comme:<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit5.version>5.1.1</junit5.version> </properties>
puis dans la
profiles
section ajoutez ce qui suit:<profiles> <profile> <id>eclipse</id> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit5.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.1</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </profile> </profiles>
Tout ce que vous avez à faire après cela est de sélectionner le profil dans votre Eclipse locale: Faites un clic droit sur votre projet et sélectionnez
Maven > Select Maven Profiles...
(ou appuyez sur Ctrl+ Alt+ P), puis vérifiez le profil "eclipse" que nous venons de créer.Avec cela, vous avez terminé. Votre Eclipse exécutera les tests Junit 5 comme prévu, mais la configuration que vous avez ajoutée ne polluera pas d'autres builds ou autre IDE
la source
L'ajout de cette dépendance maven avec JUnit Jupiter (v.5.5.1) résout le problème.
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.1</version> <scope>test</scope> </dependency>
la source
CORRECTIF SIMPLE: (Ajouter la bibliothèque JUnit 5)
INSTRUCTIONS:
la source
Aucune des solutions n'a aidé:
Le problème est qu'Eclipse 2018-12 prend en charge JUnit 5.3.1. Si vous le démarrez avec une version antérieure, il échouera.
Assurez-vous donc d'utiliser au moins 5.3.1.
5.4.0 fonctionne aussi.
Si votre pom parent est Spring Boot, vous devez vous assurer (dans la gestion des dépendances) que junit-jupiter-api est défini sur la même version. Vous n'avez pas besoin de junit-platform-runner ou -launcher !
la source
<junit-jupiter.version>5.4.1</junit-jupiter.version>
pour remplacer la version utilisée dans Spring boot (2.1.3.RELEASE).Suite à la réponse d'Andrii Karaivanskyi, voici la déclaration Maven POM:
<properties> ... <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> ... </properties> <dependencies> ... <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> ... </dependencies>
MISE À JOUR
Selon le commentaire d' Alexander Wessel, vous pouvez utiliser org.junit: junit-bom comme décrit dans sa réponse à la question Eclipse Aucun test trouvé en utilisant JUnit 5 causé par NoClassDefFoundError pour LauncherFactory .
la source
scope=import type=pom
, puis ajoutez des dépendances à junit-platform-launcher et junit-jupiter-engine dans la portée de test, sans donner de version dans la section dépendances. La nomenclature garantira toujours que vous n'avez qu'une seule version de JUnit Platform et Jupiter sur le chemin de classe, et que les versions respectives sont celles prévues (par exemple 5.2.0 avec 1.2.0).Pour info, une autre cause de "Aucun test détecté avec junit5" est (par inadvertance ou intentionnellement) de déclarer les cas de test "privés":
// Example of test case that doesn't get included @Test private void testSomeMethod() { }
Ils doivent être publics.
la source
J'ai également rencontré le même problème, il vous suffit d'ajouter la bibliothèque, la bibliothèque Junit est déjà fournie avec Eclipse, il vous suffit donc de suivre ci-dessous
Chemin de construction> Configurer le chemin de construction> bibliothèque> Ajouter une bibliothèque> JUnit> Suivant> terminer
Ça marche pour moi
la source
Dès le début, le message d'erreur vous indique que la classe n'est pas trouvée:
NoClassDefFoundError
cela signifie que le PATH to junit est le problème.Appuyez avec le bouton droit sur le dossier du projet et choisissez Propriétés OU sélectionnez le dossier du projet et appuyez sur la combinaison cmd + i.
sélectionnez dans la liste "Java Build Path".
C'est tout. Essayez à nouveau d'exécuter le test.
la source
tu devrais savoir ça :
@Before de junit4 va avec @Test: " import org.junit.Test "
ET
@BeforeEach de Junit5 va avec: " import org.junit.jupiter.api.Test "
alors assurez-vous que vous utilisez les importations de la même version de Junit, sinon cela ne fonctionnera pas, je suppose.
la source
En utilisant STS 3.9.1 j'ai eu le même problème. Cependant, actuellement je n'ai pas besoin de nouvelles fonctionnalités JUnit5, j'ai donc essayé de forcer l'utilisation d'une version plus ancienne. Si vous utilisez maven, vous pouvez ajouter les dépendances suivantes à votre pom.xml:
Cela a fait l'affaire pour moi (du moins tant que je n'ai pas besoin de JUnit5 explicitement).
la source
J'ai eu le même problème après avoir créé un nouveau TestCase: Eclipse -> New -> JUnit Test Case. Il crée une classe sans modificateur de niveau d'accès. Je pourrais résoudre le problème en mettant simplement un public avant le mot - clé class .
la source
Comme tout le monde l'a informé que c'était un bogue IDE, j'ai essayé
Eclipse
etSTS
. Dans les deux cas, il échoue.Pour contourner le problème, j'ai corrigé en modifiant le fichier pom.xml comme ci-dessous.
J'ai ajouté ces deux dépendances maven
junit-jupiter-engine
etjunit-platform-launcher
.pom.xml
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform launcher --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> </dependencies>
Assurez-vous également d'ajouter la version des deux dépendances maven dans la balise properties.
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> </properties>
la source
J'utilise eclipse 2019-09.
J'ai dû mettre à jour la version junit-bom vers au moins 5.4.0. J'avais auparavant 5.3.1 et cela a causé les mêmes symptômes de l'OP.
Ma config est maintenant:
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.5.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
la source
Puisqu'il n'est pas possible de publier des blocs de code dans les commentaires, voici le modèle POM que j'utilise dans les projets nécessitant JUnit 5. Cela permet de construire et de "Exécuter en tant que test JUnit" dans Eclipse et de construire le projet avec Maven ordinaire.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>group</groupId> <artifactId>project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>project name</name> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.3.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <scope>test</scope> </dependency> <dependency> <!-- only required when using parameterized tests --> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
Vous pouvez voir que maintenant, vous ne devez mettre à jour la version qu'à un seul endroit si vous souhaitez mettre à jour JUnit. De plus, le numéro de version de la plate-forme n'a pas besoin d'apparaître (dans une version compatible) n'importe où dans votre POM, il est automatiquement géré via l'
junit-bom
importation.la source
J'utilise:
Spring Tool Suite 4 Version: 4.4.2.RELEASE ID de build: 201911201053 Version Java: 1.8.0_191
et le message affiché est Aucun test trouvé avec le lanceur de test 'JUnit5'
ce qui a fonctionné pour moi était la configuration ci-dessous
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.5.2</junit-jupiter.version> <junit-platform.version>1.5.2</junit-platform.version> </properties> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency>
la source
Il vous manque le lanceur de plate-forme JUnit 5 avec le groupe: 'org.junit.platform', nom: 'junit-platform-launcher'
Ajoutez simplement votre POM:
la source
Même erreur que j'ai rencontrée dans la version éclipse Oxygen.3a Release (4.7.3a). Il y a un problème dans l'incompatibilité des dépendances Maven.Pour résoudre, j'ai mis à jour mon Pom.xml avec les dépendances suivantes.
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 com.netapp.junitnmactiopractice JunitAndMactioPractice 0.0.1-SNAPSHOT
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <junit.jupiter.version>5.1.1</junit.jupiter.version> <junit.platform.version>1.1.1</junit.platform.version> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-runner</artifactId> <version>${junit.platform.version}</version> <scope>test</scope> </dependency> </dependencies>
la source
junit-platform-runner
: " Runner pour exécuter des tests et des suites de tests sur la plate-forme JUnit dans un environnement JUnit 4. "Vous ne pouvez utiliser que
junit-jupiter
comme une dépendance de test au lieu dejunit-jupiter-api
,junit-platform-launcher
,junit-jupiter-engine
.<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.5.2</version> <scope>test</scope> </dependency>
la source
Pour moi, j'ai configuré le chemin de construction pour ajouter la bibliothèque JUnit 5 et aussi en ajoutant la dépendance
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.0</version> <scope>test</scope> </dependency>
séparément.
la source
J'ai également rencontré ce problème avec Eclipse (Version: 2019-12 (4.14.0)). La solution semble soit utiliser IntelliJ, soit utiliser le test Maven pour exécuter de tels tests dans Eclipse.
la source
J'ai utilisé en fait spring-tool-suite-4-4.5.1 et j'ai eu ce bogue lorsque je veux exécuter une classe de test. et la solution était d'ajouter à 'java build path', 'junit5' dans les bibliothèques java build path img
la source
tu devrais changer
@Test public static void testmethod(){}
à
@Test public void testmethod(){}
la méthode @Test n'est pas compatible avec la statique
la source
J'ai rencontré la même erreur, et dans mon cas, c'était une simple question d'aller
Project Properties > Maven > Update project
et / ou de nettoyer et de reconstruire le projet.la source
Je viens d'ajouter mon Test.class via le menu éclipse et j'ai travaillé. Faites un clic droit pour projeter -> Nouveau -> Autre -> JUnit -> JUnit Test Case
la source
Cela peut être causé par la version de junit-platform-launcher / junit-platform-runner.
1.1.0 ne fonctionne pas
1.4.1 fonctionne dans ma configuration.
Je pense que c'est un bogue dans eclipse car il fonctionne avec des bibliothèques de versions supérieures de junit et pas avec une autre version.
Cela a résolu mon problème. L'autre résolution me paraissait moins faisable ou risquée. Merci.
la source
Lorsque je change ma version de jupiter api en la dernière, cela a été résolu. Pendant ce temps, mon eclipse et d'autres idées d'extensions d'éclipse (telles que STS) obtiennent une erreur de chemin de construction. Pour chaque mise à jour de maven, ide m'oblige à définir la bibliothèque système JRE.
la source