java.lang.NoClassDefFoundError in junit

82

Ich erhalte diesen Fehler in Java in meinem Junit-Testcode. Ich habe im Internet nachgeschlagen und es heißt, dass ich die junit.jar im Klassenpfad hinzufügen muss.

In Eclipse habe ich es im Klassenpfad der Projekteigenschaften hinzugefügt, aber es wird immer noch ein Initialisierungsfehler angezeigt. 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
Chris Dennett
quelle
1
Welche Klasse fehlt laut Fehler?
BalusC

Antworten:

105
  1. Klicken Sie im Paket-Explorer mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf Eigenschaften
  2. Gehen Sie zu Java Build Path> Registerkarte Libraries
  3. Klicken Sie auf die Schaltfläche "Bibliothek hinzufügen"
  4. Wählen Sie JUnit
  5. Weiter klicken.
  6. Wählen Sie in der Dropdown-Schaltfläche JUnit4 oder andere neue Versionen.
  7. Klicken Sie auf Fertig stellen.
  8. Dann OK.
Chris Dennett
quelle
Dadurch wird JUNIT in der Bibliothek hinzugefügt, aber jetzt heißt es, dass junit.org nicht aufgelöst werden kann
5
Stellen Sie einfach sicher, dass sich die Hamcrest-Bibliothek auch im Klassenpfad befindet. Die aktuelle Version von JUnit 4 sollte vollständig enthalten sein, aber manchmal teilen die Leute Pakete auf.
Berin Loritsch
Wie gehe ich vor, wenn ich die Linux-Befehlszeile verwende? Wo füge ich dieses Glas hinzu?
Vipin8169
Die obigen Schritte funktionieren einwandfrei und es wird jar aus dem Eclipse-Plugin-Ordner entnommen. Aber wenn wir die Junit-JAR-Datei im Konfigurationspfad als externes JAR hinzufügen, sollte es richtig funktionieren? es funktionierte nicht für mich
Vineeth Bhaskaran
20
  1. Eclipse -> Hauptmenü -> Ausführen -> Konfigurationen ausführen
  2. Löschen Sie alle Vorkommen Ihres Tests. Ihr Test wird möglicherweise als YourTest.Method_1 () angezeigt. Löschen Sie das auch.
  3. Wiederholung. Lassen Sie Eclipse eine neue Konfiguration erstellen.

Nachtrag: Vor Ort habe ich eine "Benutzerbibliothek" erstellt und zu meinen Projekten hinzugefügt, die hat

hamcrest-core-1.3.jar

junit-4.12.jar

deepSymmetry
quelle
11

Das gleiche Problem kann auftreten, wenn Sie das JUnit-Glas von der JUnit-Website heruntergeladen, aber vergessen haben, das Hamcrest-Glas herunterzuladen - beide sind erforderlich (die Anweisungen besagen, dass beide heruntergeladen werden müssen, aber ich habe übersprungen! Ups)

Alex
quelle
10

Aktualisieren Sie bei Verwendung in Maven das Artefakt junit: junit von z. B. 4.8.2 auf 4.11.

Reifen
quelle
1
Dies hat ein NoClassDefFoundError: org/junit... caused by ClassNotFoundException: org.junit.runners.model.InitializationErrorfür mich behoben . Ich habe Junit 4.8 verwendet. Der Wechsel zu 4.11 hat funktioniert.
Alex
6

Bei Eclipse konnte ich das oben genannte Problem mithilfe der folgenden Schritte lösen:

Klicken Sie mit der rechten Maustaste auf die Testdatei, die Sie ausführen möchten, und wählen Sie Ausführen als -> Konfigurationen ausführen -> Registerkarte Klassenpfad auswählen -> Zu den Bootstrap-Einträgen auswählen -> Erweitert auswählen -> Bibliothek hinzufügen auswählen -> JUnit auswählen -> Weiter -> Wählen Sie JUnit4 aus der Dropdown-Liste -> Fertig stellen

Wählen Sie dann Übernehmen -> Ausführen

Sana Jahan
quelle
2

Die Klasse org / hamcrest / SelfDescribing befindet sich nicht im Laufzeitklassenpfad.

Thorbjørn Ravn Andersen
quelle
2

Diese Schritte funktionierten für mich, als der Fehler zeigte, dass die Filterklasse fehlte (wie in dieser falsch diplomatischen Frage angegeben: JUnit: NoClassDefFoundError: org / junit / running / manipulation / Filter ):

  1. Stellen Sie sicher, dass JUnit 4 in Ihrem Projekt nur einmal referenziert wird (ich habe auch die Maven-Natur entfernt, bin mir aber nicht sicher, ob dieser Schritt einen Einfluss auf die Lösung des Problems hat) .
  2. Klicken Sie mit der rechten Maustaste auf die Datei mit den Komponententests, wählen Sie Eigenschaften aus und entfernen Sie unter den Einstellungen Ausführen / Debuggen alle Einträge aus den Startkonfigurationen für diese Datei. Klicken Sie auf Übernehmen und schließen.
  3. Klicken Sie mit der rechten Maustaste auf das Projekt mit den Komponententests, wählen Sie Eigenschaften aus und entfernen Sie unter den Einstellungen Ausführen / Debuggen alle Einträge, die JUnit betreffen, aus den Startkonfigurationen. Klicken Sie auf Übernehmen und schließen.
  4. Bereinigen Sie das Projekt und führen Sie den Test aus.

Vielen Dank an diese Antworten, die mir den Hinweis für diese Lösung gegeben haben: https://stackoverflow.com/a/34067333/5538923 und https://stackoverflow.com/a/39987979/5538923 ).

marcor92
quelle
1

Versuchen Sie die folgenden Schritte:

  1. Wechseln Sie zur Ausführungskonfiguration Ihres Projekts. Fügen Sie auf der Registerkarte Klassenpfad die JUnit-Bibliothek hinzu.
  2. Wiederholen Sie die gleichen Schritte.

Es hat bei mir funktioniert.

Amit
quelle
1

Ich hatte das gleiche Problem, das Problem war in der @ContextConfiguration in meinen Testklassen, ich habe auch den Servlet-Kontext geladen, ich ändere nur:

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

Defragmentieren
quelle
1
  1. Stellen Sie sicher, dass die Umgebungsvariable JUNIT_HOME auf c: \ JUNIT gesetzt ist.
  2. dann In der Ausführungskonfiguration> Klassenpfad auswählen> externe Jars hinzufügen junit-4.11.jar
AnandSonake
quelle
1

Der Grund dafür ist, dass sich das "Hamcrest-Core" -Glas nicht im Klassenpfad befindet, da es nicht direkt mit dem Junit-Glas geliefert wird. Es gibt also zwei Möglichkeiten, dies zu beheben:

  1. Wählen Sie Projekt -> Buildpfad -> Bibliotheken hinzufügen und Junit auswählen (Es enthält sowohl Junit als auch Hamcrest-Core).
  2. Laden Sie hamcrest-core von maven repo herunter und fügen Sie es Ihrem Klassenpfad hinzu.
rishabhdaim
quelle
1

Hinzufügen meiner zwei Cent zu anderen Antworten.

Überprüfen Sie, ob Sie Ihre Testklasse nicht zufällig unter " src/main/javaÜblich" erstellt haben src/test/java. Ersteres ist die Standardeinstellung in Eclipse, wenn Sie aus irgendeinem Grund eine neue Testklasse erstellen, die übersehen werden kann. So einfach kann das sein.

Badbishop
quelle
1

In meinem Fall habe ich meine Bibliotheken stattdessen auf Classpath zu Modulepath hinzugefügt.

Dies funktioniert nur, wenn JUnit korrekt zu Classpath hinzugefügt wurde.

Geben Sie hier die Bildbeschreibung ein

Daniel Cheung
quelle
0

Dieser Fehler tritt auch auf, wenn im Klassenpfad zwei Versionen der Hamcrest-Bibliothek oder des Hamcrest-Core vorhanden sind.

In der POM-Datei können Sie die zusätzliche Version ausschließen und es funktioniert.

Ujjwal
quelle
0

Selbst Junit4.11.jar hat nicht die hamcrest-core.jar. Ich habe explizit im Klassenpfad hinzugefügt und das Problem wurde behoben.

Rohit Sharma
quelle
0

Ich habe dieses Video verfolgt: https://www.youtube.com/watch?v=WHPPQGOyy_Y, aber den Test konnte nicht ausgeführt werden. Danach habe ich alle heruntergeladenen Dateien gelöscht und den Junit mithilfe des Schrittes im Bild hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

Woden
quelle
-1

Wenn Sie mehr als eine Java-Version haben, kann dies Ihr Programm beeinträchtigen.

Ich schlage vor, Sie laden JCreator herunter.

Klicken Sie anschließend auf Konfigurieren, Optionen und JDK-Profile. Löschen Sie die alten Java-Versionen aus der Liste. Klicken Sie dann auf die Wiedergabetaste. Ihr Programm sollte erscheinen.

Wenn dies nicht der Fall ist, drücken Sie Strg + Alt + O und dann erneut die Wiedergabetaste.

Behälter
quelle