it-swarm.com.de

java.lang.NoClassDefFoundError in junit

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
65
user506710
  1. Klicken Sie im Package Explorer mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf "Eigenschaften"
  2. gehen Sie zur Registerkarte Java Build Path> Libraries
  3. klicken Sie auf die Schaltfläche "Bibliothek hinzufügen"
  4. jUnit auswählen
  5. weiter klicken.

Sie sollten von dort aus damit umgehen können.

91
Chris Dennett
  1. Eclipse -> Hauptmenü -> Ausführen -> Ausführen von Konfigurationen
  2. Löschen Sie alle Vorkommnisse Ihres Tests. Ihr Test erscheint möglicherweise als YourTest.Method_1 (). Löschen Sie das auch.
  3. Wiederholung. Lassen Sie Eclipse eine neue Konfiguration erstellen.

Nachtrag: Lokal habe ich eine "User Library" angelegt und zu meinen Projekten hinzugefügt 

hamcrest-core-1.3.jar

junit-4.12.jar

17
deepSymmetry

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)

11
Alex

Bei der Verwendung in Maven aktualisieren Sie Artefakt junit: junit von z. 4.8.2 bis 4.11.

8
Tires

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:

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

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

1
marcor92
  1. Stellen Sie sicher, dass die Umgebungsvariable JUNIT_HOME auf c:\JUNIT gesetzt ist.
  2. dann In Laufkonfiguration> Klassenpfad auswählen> Externe jars junit-4.11.jar hinzufügen 
1
AnandSonake

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

1
Sana Jahan

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.

1
Defrag

Versuchen Sie unter den folgenden Schritten:

  1. Gehen Sie zur Laufkonfiguration Ihres Projekts. Fügen Sie auf der Registerkarte Classpath die JUnit-Bibliothek hinzu.
  2. Wiederholen Sie die gleichen Schritte.

Es hat für mich funktioniert.

1
Amit

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:

  1. projekt auswählen -> Buildpath -> Bibliotheken hinzufügen und Junit auswählen (enthält sowohl Junit als auch Hamcrest-Core)
  2. laden Sie hamcrest-core von maven repo herunter und fügen Sie dies Ihrem Klassenpfad hinzu.
1
rishabhdaim

selbst Junit 4.11.jar hat nicht das hamcrest-core.jar. Ich habe den Klassenpfad explizit hinzugefügt und das Problem wurde behoben.

0
Rohit Sharma

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.

0
badbishop

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.

0
Ujjwal