it-swarm.com.de

Klasse nicht gefunden Ausnahme beim Ausführen des JUnit-Tests

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.

85
xybrek

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.

85
Newtrino

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.

87
slomek

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:

  • Suchen Sie den Ausgabeordner Ihres Projekts unter Project properties -> Java Build Path -> Default output folder
    • Normalerweise ist dies <project-folder>/bin
  • Gehe zu Run -> Run Configurations...
  • Klicken Sie auf die Laufkonfiguration des Gerätetests und dann auf die Registerkarte Classpath
  • Fügen Sie den Ausgabeordner Ihres Projekts explizit unter User Entries hinzu - auch wenn das Projekt bereits dort enthalten ist
    • Klicken Sie auf Advanced -> Add folder, um den Ausgabeordner hinzuzufügen

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

17
nhylated

Wenn dieses Problem nur in Eclipse auftritt, kann es hilfreich sein, den Befehl Project -> Clean ... für das ausgewählte Projekt auszuführen.

12
johanwannheden

Nachdem ich hier alles ohne Verbesserung ausprobiert hatte, konnte ich mein Problem durch einen Neustart von Eclipse lösen

10
Berit Larsen

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.

3
ITisha

In meinem Fall haben mir nur die nächsten Schritte geholfen, dieses Problem zu lösen:

  1. Projekt-> Eigenschaften-> Einstellungen ausführen/debuggen. 
  2. Wählen Sie unter "Konfigurationen für" ..... "" Klassen/Projekte aus 
  3. Bearbeiten -> Klassenpfad -> "Standardeinträge wiederherstellen"
1
Roman Romaniuk

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.

1
David Obber

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.

1
user3222211

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.

0
Agniva Dutta

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.

0
Blake Neal

Das Problem kann behoben werden, indem Sie eine Scheinänderung vornehmen und die Testklasse speichern. Die .class wird automatisch erstellt

0
Lorenzo Lerate

1- mvn Eclipse: Eclipse

2- Reinigen Sie alle Projekte

3- neu starten

0
Toumi

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.

0
Nayan

Diese Schritte haben für mich funktioniert.

  • Löschen Sie den Inhalt des lokalen Maven-Repository.
  • führen Sie mvn clean install in der Befehlszeile aus. (cd zum pom-verzeichnis).
  • Projekt in Eclipse erstellen.
0

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

0
Philip Rego

Es scheint ein Kompilierungsproblem zu sein. Führen Sie das Projekt als Maven-Test und anschließend als JUnit-Test aus.

0
Yao Li

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.

0
Ben

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?"

0
William