Je reçois cette erreur en Java dans mon code de test Junit. J'ai levé les yeux sur le net et il m'a dit que je devais ajouter le junit.jar dans le classpath.
Dans Eclipse, je l’ai ajouté dans le chemin de classe des fenêtres de Propriétés du projet mais j’ai toujours une erreur d’initialisation. Que devrais-je faire..?
C'est la trace complète de l'erreur:
Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at Java.lang.ClassLoader.defineClass1(Native Method)
at Java.lang.ClassLoader.defineClassCond(Unknown Source)
at Java.lang.ClassLoader.defineClass(Unknown Source)
at Java.security.SecureClassLoader.defineClass(Unknown Source)
at Java.net.URLClassLoader.defineClass(Unknown Source)
at Java.net.URLClassLoader.access$000(Unknown Source)
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.Java:13)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:24)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.Java:32)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.Java:25)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.Java:41)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.Java:31)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:452)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)
Caused by: Java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
... 25 more
Vous devriez pouvoir le gérer à partir de là.
Addendum: localement, j'ai créé une "bibliothèque utilisateur" et ajouté à mes projets
hamcrest-core-1.3.jar
junit-4.12.jar
Le même problème peut se produire si vous avez téléchargé le fichier JUnit à partir du site Web JUnit, mais que vous avez oublié de télécharger le fichier Hamcrest - les deux sont obligatoires (les instructions disent de télécharger les deux, mais j'ai sauté à l'avance!
Lors de l'utilisation de Maven, mettez à jour l'artefact junit: junit à partir, par exemple, de 4.8.2 à 4.11.
La classe org/hamcrest/SelfDescribing ne figure pas sur le chemin d'accès aux classes au moment de l'exécution.
Ces étapes ont fonctionné pour moi lorsque l'erreur a montré que la classe Filter était manquante (comme indiqué dans cette false-diplicated question: JUnit: NoClassDefFoundError: org/junit/runner/manipulation/Filter ):
Merci à ces réponses de me donner l’allusion pour cette solution: https://stackoverflow.com/a/34067333/5538923 et https://stackoverflow.com/a/39987979/5538923 ).
Sur Eclipse, j'ai pu résoudre le problème ci-dessus en suivant les étapes ci-dessous:
Cliquez avec le bouton droit sur le fichier de test que vous souhaitez exécuter, Sélectionnez Exécuter en tant que -> Exécuter les configurations -> onglet Sélectionner chemin de classe -> Sélectionner les entrées d'amorçage -> Sélectionner Avancé -> Sélectionner Ajouter une bibliothèque -> Sélectionner JUnit -> Suivant -> Sélectionnez JUnit4 dans le menu déroulant -> Terminer
Ensuite, sélectionnez Appliquer -> Exécuter
J'ai eu le même problème, le problème était dans la @ContextConfiguration dans mes classes de test, je chargeais le contexte de servlet aussi
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
à:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
et c’est ça . De cette façon, je ne charge que tous les fichiers avec le motif * -context.xml dans le chemin de test.
Essayez les étapes ci-dessous:
Cela a fonctionné pour moi.
La raison en est que le bocal "hamcrest-core" n'est pas dans classpath car il ne vient pas directement avec le junit. Donc, il y a deux façons de résoudre ce problème:
même Junit 4.11.jar ne possède pas le fichier hamcrest-core.jar. J'ai ajouté explicitement dans le classpath et le problème a été résolu.
Ajout de mes deux cents à d'autres réponses.
Vérifiez si vous n'avez pas créé votre classe de test sous src/main/Java
à la place de src/test/Java
. La première est la valeur par défaut dans Eclipse lorsque vous créez une nouvelle classe de test pour une raison quelconque et peut être ignorée. Cela peut être aussi simple que cela.
Cette erreur survient également si 2 versions de hamcrest-library ou de hamcrest-core sont présentes dans le classpath.
Dans le fichier pom, vous pouvez exclure la version supplémentaire et cela fonctionne.