Ich erhalte diesen Fehler in Java in meinem Junit-Testcode. Ich habe im Netz nachgeschlagen und es heißt, dass ich die junit.jar im Klassenpfad hinzufügen muss.
In Eclipse habe ich es im Klassenpfad der Projekteigenschaftsfenster hinzugefügt, aber ich bekomme immer noch einen Initialisierungsfehler. Was soll ich machen..?
Dies ist die vollständige Spur des Fehlers:
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
Sie sollten von dort aus damit umgehen können.
Nachtrag: Lokal habe ich eine "User Library" angelegt und zu meinen Projekten hinzugefügt
hamcrest-core-1.3.jar
junit-4.12.jar
Dasselbe Problem kann auftreten, wenn Sie JUnit jar von der JUnit-Website heruntergeladen haben, das Hamcrest-jar jedoch nicht heruntergeladen wurden. Beide sind erforderlich (die Anweisungen besagen, beide herunterzuladen, aber ich habe den Schritt vorher übersprungen! Oops)
Bei der Verwendung in Maven aktualisieren Sie Artefakt junit: junit von z. 4.8.2 bis 4.11.
Die Klasse org/hamcrest/SelfDescribing befindet sich nicht im Laufzeitklassenpfad.
Diese Schritte funktionierten für mich, als der Fehler zeigte, dass die Filter-Klasse fehlte (wie in dieser falsch-dipliziert Frage: JUnit: NoClassDefFoundError: org/junit/runner/manipulation/Filter ) gemeldet:
Dank dieser Antworten haben Sie mir den Hinweis für diese Lösung gegeben: https://stackoverflow.com/a/34067333/5538923 und https://stackoverflow.com/a/39987979/5538923 ).
Bei Eclipse konnte ich das obige Problem lösen, indem ich die folgenden Schritte befolge:
Klicken Sie mit der rechten Maustaste auf die Testdatei, die Sie ausführen möchten Wählen Sie Ausführen als -> Konfigurationen ausführen -> Registerkarte Classpath auswählen -> Wählen Sie die Bootstrap-Einträge aus -> Weiter -> Wählen Sie JUnit4 aus der Dropdown-Liste aus -> Fertig stellen
Wählen Sie dann Anwenden -> Ausführen
Ich hatte das gleiche Problem, das Problem war in der @ContextConfiguration in mir Testklassen. Ich habe auch den Servlet-Kontext geladen.
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
zu:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
und das ist es ... auf diese Weise lade ich nur alle Dateien mit dem Muster * -context.xml in meinem Testpfad.
Versuchen Sie unter den folgenden Schritten:
Es hat für mich funktioniert.
Der Grund dafür ist, dass "Hamcrest-Core" jar nicht im Klassenpfad enthalten ist, da er nicht direkt mit junit jar geliefert wird. Es gibt also zwei Möglichkeiten, dieses Problem zu lösen:
selbst Junit 4.11.jar hat nicht das hamcrest-core.jar. Ich habe den Klassenpfad explizit hinzugefügt und das Problem wurde behoben.
Hinzufügen meiner zwei Cent zu anderen Antworten.
Überprüfen Sie, ob Sie Ihre Testklasse nicht zufällig unter src/main/Java
anstatt unter dem üblichen src/test/Java
erstellt haben. Ersteres ist die Standardeinstellung in Eclipse, wenn Sie aus irgendeinem Grund eine neue Testklasse erstellen, die übersehen werden kann. So einfach kann das sein.
Dieser Fehler tritt auch auf, wenn zwei Versionen der Hamcrest-Library oder des Hamcrest-Core im Klassenpfad vorhanden sind.
In der POM-Datei können Sie die zusätzliche Version ausschließen und sie funktioniert.