web-dev-qa-db-fra.com

java.lang.NoClassDefFoundError in junit

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
65
user506710
  1. Cliquez avec le bouton droit sur votre projet dans Package Explorer> cliquez sur Propriétés.
  2. accédez à l'onglet Chemin de construction Java> Bibliothèques.
  3. cliquer sur le bouton 'Ajouter une bibliothèque'
  4. sélectionnez JUnit
  5. cliquez sur Suivant.

Vous devriez pouvoir le gérer à partir de là.

91
Chris Dennett
  1. Eclipse -> Menu supérieur -> Exécuter -> Exécuter les configurations
  2. Supprimez toutes les occurrences de votre test. Votre test peut apparaître sous la forme YourTest.Method_1 (). Supprimer cela aussi.
  3. Rediffusion. Laissez Eclipse construire une nouvelle configuration.

Addendum: localement, j'ai créé une "bibliothèque utilisateur" et ajouté à mes projets 

hamcrest-core-1.3.jar

junit-4.12.jar

17
deepSymmetry

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!

11
Alex

Lors de l'utilisation de Maven, mettez à jour l'artefact junit: junit à partir, par exemple, de 4.8.2 à 4.11.

8
Tires

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 ):

  1. Assurez-vous de n'avoir référencé JUnit 4 qu'une seule fois dans votre projet (J'ai également supprimé la nature Maven, mais je ne suis pas sûr que cette étape ait une influence sur la résolution du problème )}.
  2. Cliquez avec le bouton droit de la souris sur le fichier contenant les tests unitaires, sélectionnezPropriétés, et sous les paramètres Exécuter/Déboguer, supprimez les entrées Des configurations de lancement de ce fichier. Appuyez sur Appliquer et fermez.
  3. Cliquez avec le bouton droit de la souris sur les projets contenant les tests unitaires, sélectionnezPropriétés et, sous les paramètres Exécuter/Déboguer, supprimez les entrées Impliquant JUnit des configurations de lancement. Appuyez sur Appliquer et fermez.
  4. Nettoyez le projet et exécutez le test.

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

1
marcor92
  1. Assurez-vous que la variable d'environnement JUNIT_HOME est définie sur c:\JUNIT.
  2. puis En configuration d'exécution> sélectionnez chemin de classe> ajout de jars externes junit-4.11.jar 
1
AnandSonake

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

1
Sana Jahan

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.

1
Defrag

Essayez les étapes ci-dessous:

  1. Accédez à la configuration d'exécution de votre projet. Dans l'onglet Classpath, ajoutez la bibliothèque JUnit.
  2. Réessayez les mêmes étapes.

Cela a fonctionné pour moi.

1
Amit

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:

  1. sélectionnez projet -> buildpath -> ajoutez des bibliothèques et sélectionnez junit (il contient à la fois junit et hamcrest-core)
  2. téléchargez hamcrest-core depuis maven repo et ajoutez-le à votre chemin de classe.
1
rishabhdaim

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.

0
Rohit Sharma

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.

0
badbishop

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.

0
Ujjwal