Diese Fehlermeldung wird beim Ausführen des JUnit-Tests in Eclipse angezeigt:
Class not found com.myproject.server.MyTest
Java.lang.ClassNotFoundException: com.myproject.server.MyTest
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:366)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:423)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:356)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.Java:693)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.Java:429)
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)
Ich habe versucht, die JUnit
-Bibliothek im Klassenpfad hinzuzufügen, obwohl ich Maven verwende und die JUnit-Bibliothek in der POM-Abhängigkeit ist.
Ich habe bereits versucht, das Projekt zu bereinigen und einen neuen JUnit-Testfall mit dem JUnit-Plugin für Eclipse erstellt, wobei immer noch derselbe Fehler angezeigt wird.
Dies tritt auf, weil nur der Quellcode kompiliert wird, wenn Sie mvn clean compile
verwenden (ich verwende maven 3.1.0, daher bin ich mir nicht sicher, ob er sich immer so verhält).
Wenn Sie mvn test
ausführen, wird der Testcode ebenfalls kompiliert. Dann werden jedoch die Tests ausgeführt (was möglicherweise nicht sofort erwünscht ist, wenn Sie versuchen, sie über Eclipse auszuführen.) Sie können test-compile
zum Befehl Maven hinzufügen Reihenfolge, wann immer Sie einen mvn clean
ausführen. Zum Beispiel würden Sie mvn clean compile test-compile
ausführen.
Ich hatte ein ähnliches Problem mit meinen Tests und fand irgendwo im Web, dass Sie nach Build Path in den Eigenschaften Ihres Projekts gehen und Maven-Abhängigkeiten oben JRE-Systembibliothek verschieben müssen. Das scheint für mich funktioniert zu haben.
Ich war mit dem gleichen Problem konfrontiert und konnte es mithilfe von @ slomek answer beheben, aber danach wurde das Problem erneut gelöst.
Ich habe es schließlich behoben, indem ich den Ausgabeordner meines Projekts zur Laufkonfiguration des JUnit-Tests hinzugefügt habe. Schritte sind:
Project properties -> Java Build Path -> Default output folder
<project-folder>/bin
Run -> Run Configurations...
Classpath
User Entries
hinzu - auch wenn das Projekt bereits dort enthalten ist Advanced -> Add folder
, um den Ausgabeordner hinzuzufügenDieses Problem könnte auf ein seltsames Projekt in Eclipse zurückzuführen sein, z. Quellordner mit verschachtelten Maven-Projekten, die als einzelnes Projekt/Ordner importiert wurden (zumindest war dies so, wie mein Projekt eingerichtet wurde).
Wenn dieses Problem nur in Eclipse auftritt, kann es hilfreich sein, den Befehl Project -> Clean ... für das ausgewählte Projekt auszuführen.
Nachdem ich hier alles ohne Verbesserung ausprobiert hatte, konnte ich mein Problem durch einen Neustart von Eclipse lösen
In meinem Fall hatte ich eine falsche Verzeichnisstruktur.
Welches sollte sein:
/src/test/Java/com.myproject.server.MyTest
Nachdem ich das behoben hatte, funktionierte alles wie ein Zauber.
In meinem Fall haben mir nur die nächsten Schritte geholfen, dieses Problem zu lösen:
Ich hatte das gleiche Problem mit einem Gradle-Projekt mit einem Test-SourceSet mit zwei Ressourcenverzeichnissen.
Dieses Snippet stammt aus einem main-module.gradle und fügt dem SourceSet des Tests ein Ressourcenverzeichnis hinzu:
sourceSets {
test {
resources {
srcDir('../other-module/src/test/resources')
}
}
}
Dabei hatte ich zwei Ressourcenverzeichnisse, die sich auf das Test SourceSet des Projekthauptmoduls bezogen:
../other-module/src/test/resourcessrc/test/resources (relativ zum Hauptmodulordner, wird vom Java-Plugin automatisch hinzugefügt)
Ich finde heraus, dass, wenn ich zwei Dateien mit dem gleichen Namen in beiden Quellverzeichnissen hatte, etwas in der Prozessressourcenphase fehlgeschlagen ist. Als Ergebnis wurde keine Kompilierung gestartet und aus diesem Grund wurde keine .class in das bin-Verzeichnis kopiert, in dem JUnit nach den Klassen suchte. Die ClassNotFoundException verschwand einfach beim Umbenennen einer der beiden Dateien.
Früher, in diesem Fall, habe ich immer mvn Eclipse:eclipse
gemacht und meinen Eclipse neu gestartet, und es hat funktioniert. Nach der Migration zu GIT funktionierte es für mich nicht mehr, was etwas seltsam ist.
Grundproblem ist hier, dass Herr Eclipse die kompilierte Klasse nicht findet. Dann habe ich den Ausgabeordner als Projekt/Ziel/Testklassen festgelegt, der standardmäßig von mvn clean install
generiert wird, ohne den Test zu überspringen, und fuhr mit der folgenden Problemumgehung fort:
Option 1: Legen Sie den Klassenpfad für jeden Testfall fest
Eclipse -> Run -> Run Configurations -> unter JUnit -> mytest auswählen -> unter Classpath -> Select User Entries -> Advanced -> Add Folder -> Select -> Apply -> Run
Option 2: Erstellen Sie eine Classpath-Variable und fügen Sie sie für alle Testfälle in Classpath ein
Eclipse -> Windows -> Klassenpfadvariablen -> Neu -> [Name: Junit_test_cases_cp | Pfad:] -> ok Gehen Sie dann zu Eclipse -> Ausführen -> Konfigurationen ausführen -> JUnit -> wählen Sie mytest -> unter Classpath -> Select User Entries -> Advanced -> Classpath-Variablen hinzufügen> Wählen Sie Junit_test_cases_cp-> ok-> Apply-> Run
Dies ist das einzige, was derzeit für mich funktioniert, nachdem ich alle Vorschläge online ausprobiert habe.
Ich hatte dasselbe Problem. Ich löste das Problem, indem ich die Abhängigkeit von externen Junit-JARs entfernte, die ich durch externen Download aus dem Internet hinzugefügt hatte. Aber dann ging ich zu project-> properties-> build path-> add library-> junit-> wählte die Version (ex junit4) -> apply.
Die Abhängigkeit wurde automatisch hinzugefügt. es hat mein Problem gelöst.
Als weitere Antwort ist es erwähnenswert, dass Sie, wenn Sie eGit verwenden und Ihr Klassenpfad aktualisiert wird, beispielsweise durch ein Test-Coverage-Tool wie Clover, dass manchmal ein Bereinigungsfehler auftritt, der den Inhalt von /path/to/git/repository/<project name>/bin/
nicht vollständig löscht
Im Wesentlichen verwendete ich die Fehlerprotokollansicht von Eclipse, erkannte die Probleme, die während dieser Bereinigung verursacht wurden, navigierte zum Quellverzeichnis und löschte das Verzeichnis <project name>/bin
manuell. Nachdem das erledigt war, ging ich zurück zu Eclipse und erneuerte (F5
) mein Projekt und der Fehler ging weg.
Das Problem kann behoben werden, indem Sie eine Scheinänderung vornehmen und die Testklasse speichern. Die .class wird automatisch erstellt
1- mvn Eclipse: Eclipse
2- Reinigen Sie alle Projekte
3- neu starten
Ich hatte ein ähnliches Problem mit meinem Eclipse Helios, der Junits debugging. Mein Problem war etwas anders, da ich Junits erfolgreich ausführen konnte, aber als ich ClassNotFoundException beim Debuggen der gleichen JUNITs bekam.
Ich habe alle möglichen unterschiedlichen Lösungen aus Stackoverflow.com und anderen Foren ausprobiert, aber nichts scheint zu funktionieren. Nachdem ich fast zwei Tage lang mit diesem Thema gegen den Kopf geklopft hatte, fand ich schließlich die Lösung dafür.
Wenn keine der Lösungen zu funktionieren scheint, löschen Sie einfach den in Ihrem Arbeitsbereich erstellten .metadata-Ordner. Dies würde einen zusätzlichen Aufwand beim Importieren der Projekte und aller Arten von Konfigurationen verursachen, die Sie bereits vorgenommen haben. Diese Probleme werden jedoch sicherlich gelöst.
Hoffe, das hilft.
Diese Schritte haben für mich funktioniert.
NoClassDefFoundError bedeutet wirklich, dass die Klasse nicht initialisiert werden kann. Es hat nichts damit zu tun, die Klasse zu finden. Ich habe diesen Fehler erhalten, als ich trim () für einen Null-String aufrief.
JUnit zeigt keine NullPointerException an. Die Zeichenfolge ist bei normaler Ausführung nicht null, da Ich hole die Zeichenfolge aus einer Eigenschaftsdatei ab, die für Tests nicht verfügbar ist.
Mein Rat ist, Teile aus der Klasse zu entfernen, bis die Tests bestanden werden. Dann können Sie feststellen, in welcher Zeile der Fehler auftritt.
Weitere Informationen finden Sie hier: https://stackoverflow.com/a/6352584/1308453https://stackoverflow.com/a/6352584/1308453
Es scheint ein Kompilierungsproblem zu sein. Führen Sie das Projekt als Maven-Test und anschließend als JUnit-Test aus.
Prüfen Sie, ob Ihr Projekt als Maven-Projekt und nicht nur als normales Java-Projekt geöffnet ist. Eigentlich ein Kinderspiel, aber das ist genau der gleiche Grund, warum Sie es vermissen könnten.
Es kann auch daran liegen, dass "[ERROR] In dieser Umgebung kein Compiler vorhanden ist. Möglicherweise laufen Sie auf einer JRE anstatt auf einem JDK?"