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

117

Beim Ausführen des JUnit-Tests in Eclipse wird folgende Fehlermeldung 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, eine JUnitBibliothek im Klassenpfad hinzuzufügen, obwohl ich maven verwende, und die JUnit-Bibliothek befindet sich in der POM-Abhängigkeit.

Ich habe bereits versucht, das Projekt zu bereinigen, und einen neuen JUnit-Testfall mit dem JUnit-Plugin für Eclipse erstellt, wobei immer noch der gleiche Fehler angezeigt wird.

Quarks
quelle
10
Versuchen Sie zu laufen, mvn clean testsobald alle
Testklassen
1
Können Sie bitte überprüfen, ob sich com.myproject.server.MyTest im Ordner bin befindet? Ich meine, wenn es aufgrund eines Kompilierungs- oder Erstellungspfadfehlers nicht kompiliert wird, wird dieser Fehler angezeigt.
Vikas
Testen Sie eine Klasse oder das gesamte Projekt?
Doszi89
Mögliches Duplikat von Eclipse - java.lang.ClassNotFoundException
Amos M. Carpenter
1
In meinem Fall hat das Ausführen von Tests mit Maven funktioniert. Wenn ich jedoch mit der rechten Maustaste auf eine Testklasse klicke und Ausführen als -> JUnit-Test wähle, wird ClassNotFoundException gemeldet. Ich habe es behoben, indem ich mit der rechten Maustaste auf das Projekt geklickt habe und zu Eigenschaften -> Builder
gegangen bin

Antworten:

120

Dies scheint zu geschehen, weil nur der Quellcode kompiliert wird, wenn Sie ihn verwenden mvn clean compile(ich verwende maven 3.1.0, daher bin ich mir nicht sicher, ob er sich immer so verhalten hat).

Wenn Sie ausführen mvn test, wird auch der Testcode kompiliert, aber dann werden die Tests ausgeführt (was möglicherweise nicht sofort wünschenswert ist, wenn Sie versuchen, sie über Eclipse auszuführen.) Um dies zu umgehen test-compile, müssen Sie Ihre Maven-Befehlssequenz jederzeit hinzufügen du machst ein mvn clean. Zum Beispiel würden Sie laufen mvn clean compile test-compile.

Newtrino
quelle
1
Ich hatte dies einmal passiert und Slomeks Antwort funktionierte und dann passierte der gleiche Fehler erneut, so dass ich dies auch versuchen musste. Es funktioniert jetzt wieder einwandfrei. Um sicher zu gehen, sollten Sie beide Dinge tun.
Roger
Danke, es hat bei mir funktioniert. Aber in meinem Fall hat es erst nach Abschluss funktioniert und das Projekt in Eclipse wieder geöffnet.
Paramesh Korrakuti
Führen Sie in einfachen Worten eine 'mvn clean test-compile' durch und führen Sie dann Ihre Junit-Tests in Eclipse aus. Es hat bei mir funktioniert. Vielen Dank.
Sreram
103

Ich hatte ein ähnliches Problem mit meinen Tests und stellte irgendwo im Web fest, dass Sie in den Eigenschaften Ihres Projekts zum Pfad erstellen gehen und die Maven-Abhängigkeiten über die JRE-Systembibliothek verschieben müssen . Das scheint bei mir funktioniert zu haben.

Slomek
quelle
1
Danke, das hat mein Problem gelöst. Beim eigentlichen Test wurde der Fehler "Klasse nicht gefunden" angezeigt, als ich versuchte, ihn auszuführen. Ich denke, dies ist wahrscheinlich ein vorzuziehender erster Schritt, bevor zusätzliche MVN-Build-Ziele hinzugefügt werden.
Roger
8
Diese Methode wird mit Screenshots in diesem Beitrag beschrieben (falls die Schritte aus der obigen Antwort von @ slomek nicht klar hervorgehen)
nhyliert
2
Ich konnte Maven Managed Dependencies nicht über die JRE-Systembibliothek in Eclipse Mars 2 verschieben, aber ich konnte mit der rechten Maustaste auf das Projekt klicken und zu Eigenschaften -> Builder gehen und dann Maven Project Builder über den Java Builder verschieben, und es funktionierte für mich.
Xorcus
Ich habe alles oben Genannte ausprobiert und es hat nicht funktioniert. Ich konnte auch die Maven-Abhängigkeiten über die JRE-Systembibliothek nicht verschieben, aber das war auf der Registerkarte Bibliotheken. Dann ging ich zu Build Path -> Order & Export ->, um Maven-Abhängigkeiten über die JRE-Systembibliothek zu verschieben. Dann habe ich das Projekt erstellt und eine Maven-Installation ausgeführt, dann wurde der Test erfolgreich ausgeführt.
Megan
22

Ich hatte das gleiche Problem und konnte es mithilfe der Antwort von @ slomek beheben, aber das Problem trat danach wieder auf.

Ich habe es schließlich behoben, indem ich den Ausgabeordner meines Projekts zur Ausführungskonfiguration des JUnit-Tests hinzugefügt habe. Schritte sind:

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

Dieses Problem kann auf eine seltsame Projekteinrichtung in Eclipse zurückzuführen sein - z. B. auf einen Quellordner mit verschachtelten Maven-Projekten, die als einzelnes Projekt / Ordner importiert wurden (zumindest wurde mein Projekt so eingerichtet).

nhyliert
quelle
Ich danke dir sehr; Ich hatte dieses Problem. Ihr Fix hat bei mir funktioniert. Die beiden Besten taten es nicht. Up-Voted.
Davtom
Absolut brilliant! Ich kratzte mir schon seit Ewigkeiten am Kopf. Vielen Dank!
RayCh
17

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

johanwannheden
quelle
Danke - es hat tatsächlich bei mir funktioniert - JAVE EE Eclipse Gradlew
Abdeali Chandanwala
11

Nachdem ich hier alles ohne Verbesserung ausprobiert hatte, löste ich mein Problem, indem ich Eclipse einfach neu startete

Berit Larsen
quelle
5

Ich habe mein Problem durch Ausführen des Maven-Updates behoben. Klicken Sie mit der rechten Maustaste auf Projekt projizieren> Maven> Projekt aktualisieren

Azianer
quelle
3

In meinem Fall hatte ich eine falsche Maven-Verzeichnisstruktur.

Welches sollte sein wie:

/ src / test / java / com.myproject.server.MyTest

Nachdem ich das behoben hatte, funktionierte alles wie ein Zauber.

ITisha
quelle
2

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

  1. Projekt-> Eigenschaften-> Einstellungen ausführen / debuggen.
  2. Wählen Sie unter "Konfigurationen für '.....' starten" Klassen / Projekte aus
  3. Bearbeiten -> Klassenpfad -> "Standardeinträge wiederherstellen"
Roman Romaniuk
quelle
Vielen Dank!! Nur dieser hat mir geholfen !!
Sumandas
1

Früher habe ich in diesem Fall immer mvn gemacht eclipse:eclipse und meine Eclipse neu gestartet, und es hat funktioniert. Nach der Migration zu GIT hat es für mich aufgehört zu arbeiten, was etwas seltsam ist.

Grundproblem hier ist, dass Herr Eclipse die kompilierte Klasse nicht findet. Dann setze ich den Ausgabeordner als Project / target / test-classes, der standardmäßig von generiert wirdmvn clean install ohne den Test zu überspringen, und mit der folgenden Problemumgehung fortgefahren:

Option 1: Legen Sie den Klassenpfad für jeden Testfall fest

Eclipse -> Ausführen -> Konfigurationen ausführen -> unter JUnit-> mytest auswählen -> unter Registerkarte Klassenpfad-> Benutzereinträge auswählen-> Erweitert-> Ordner hinzufügen -> Auswählen -> Übernehmen-> Ausführen

Option 2: Erstellen Sie eine Klassenpfadvariable und fügen Sie sie für alle Testfälle in den Klassenpfad 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 aus -> unter der Registerkarte Klassenpfad -> Benutzereinträge auswählen-> Erweitert-> Klassenpfadvariablen hinzufügen-> Wählen Sie Junit_test_cases_cp-> ok- > Übernehmen-> Ausführen

Dies ist das einzige, was derzeit für mich funktioniert, nachdem ich alle Vorschläge online ausprobiert habe.

user3222211
quelle
1

Ich hatte das gleiche Problem mit einem Gradle-Projekt mit einem Test-SourceSet mit zwei Ressourcenverzeichnissen.

Dieses Snippet stammt von einem main-module.gradle und fügt dem Test SourceSet ein Ressourcenverzeichnis hinzu:

sourceSets {
    test {
        resources {
            srcDir('../other-module/src/test/resources')
        }
    }
}

Dabei hatte ich zwei Ressourcenverzeichnisse, die sich auf den Test SourceSet des Projekthauptmoduls bezogen:

../other-module/src/test/resources src / test / resources (relativ zum Hauptmodulordner, automatisch vom Java-Plugin hinzugefügt)

Ich finde heraus, dass, wenn ich zwei Dateien mit demselben Namen in beiden Quellverzeichnissen hatte, etwas in der Phase der Prozessressourcen schief gelaufen ist. Infolgedessen 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 ist verschwunden, als nur eine der beiden Dateien umbenannt wurde.

David Obber
quelle
1

NoClassDefFoundError bedeutet wirklich, dass die Klasse nicht initialisiert werden kann. Es hat nichts zu tun, die Klasse zu finden. Ich habe diesen Fehler beim Aufrufen von trim () für einen Null-String erhalten.

JUnit zeigt keine NullPointerException an. Die Zeichenfolge ist bei normaler Ausführung nicht null, da ich die Zeichenfolge aus einer Eigenschaftendatei abrufe, die für Tests nicht verfügbar ist.

Mein Rat ist, Teile aus der Klasse zu entfernen, bis Ihre Tests bestanden sind. Dann können Sie bestimmen, welche Zeile den Fehler ausgibt.

Philip Rego
quelle
0

Ich hatte ein ähnliches Problem mit meinem Eclipse Helios, das Junits debuggt. Mein Problem war wenig anders, da ich Junits erfolgreich ausführen konnte, aber als ich beim Debuggen derselben JUNITs ClassNotFoundException erhielt.

Ich habe alle möglichen Lösungen ausprobiert, die auf Stackoverflow.com und in anderen Foren verfügbar sind, aber nichts scheint zu funktionieren. Nachdem ich mich fast zwei Tage lang mit diesem Problem beschäftigt hatte, fand ich schließlich die Lösung dafür heraus.

Wenn keine der Lösungen zu funktionieren scheint, löschen Sie einfach den in Ihrem Arbeitsbereich erstellten Metadatenordner. Dies würde einen zusätzlichen Aufwand für den Import der Projekte und aller von Ihnen vorgenommenen Konfigurationen verursachen, aber diese werden dieses Problem sicherlich lösen.

Hoffe das hilft.

Nayan
quelle
Hinweis: Um dies zu tun, müssen Sie Ihre Umgebung neu erstellen. Also, während es Lösung kann nur bewusst sein, was Sie tun werden ...
Bob
0

Diese Schritte haben bei mir funktioniert.

  • Löschen Sie den Inhalt des lokalen Maven-Repositorys.
  • Führen Sie mvn clean install in der Befehlszeile aus. (CD ins POM-Verzeichnis).
  • Projekt in Eclipse erstellen.
Jake Graham Arnold
quelle
0

1-mvn-Sonnenfinsternis: Sonnenfinsternis

2- Projekt alle Projekte reinigen

3- Neustart

Toumi
quelle
0

Als weitere Antwort ist zu erwähnen, dass, wenn Sie eGit verwenden und Ihr Klassenpfad beispielsweise aufgrund eines Testabdeckungstools wie Clover aktualisiert wird, manchmal ein Bereinigungsproblem auftritt, bei dem der Inhalt von nicht vollständig gelöscht wird /path/to/git/repository/<project name>/bin/

Im Wesentlichen habe ich die Fehlerprotokollansicht von Eclipse verwendet, festgestellt, was während dieser Bereinigung Probleme verursacht hat, zum Quellverzeichnis navigiert und das Verzeichnis manuell gelöscht <project name>/bin. Sobald das erledigt war, ging ich zurück zu Eclipse und aktualisierte ( F5) mein Projekt und der Fehler verschwand.

Blake Neal
quelle
0

Überprüfen Sie, ob Ihr Projekt als Maven-Projekt und nicht nur als reguläres Java-Projekt geöffnet ist. Eigentlich ein Kinderspiel, aber das ist genau der gleiche Grund, warum Sie es vielleicht verpassen.

Ben
quelle
0

Dies kann auch an "[ERROR] In dieser Umgebung wird kein Compiler bereitgestellt. Möglicherweise wird auf einer JRE anstelle eines JDK ausgeführt?"

Wilhelm
quelle
0

Ich hatte das gleiche Problem. Ich habe es gelöst, indem ich die externe JUnit-JAR-Abhängigkeit entfernt habe, die ich durch externen Download aus dem Internet hinzugefügt habe. Aber dann ging ich zu Projekt-> Eigenschaften-> Pfad erstellen-> Bibliothek hinzufügen-> junit-> wählte die Version (ex junit4) -> anwenden.

Die Abhängigkeit wurde automatisch hinzugefügt. es hat mein Problem gelöst.

Agniva Dutta
quelle
0

Durch Dummy-Änderungen und Speichern der Testklasse kann das Problem behoben werden. Die .class wird automatisch erstellt

Lorenzo Lerate
quelle
0

Es scheint Kompilierungsproblem. Führen Sie das Projekt als Maven-Test und dann als JUnit-Test aus.

Yao Li
quelle
0

Bitte überprüfen Sie, ob Sie junit4 als Abhängigkeit hinzugefügt haben.

z.B

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
Ishan Liyanage
quelle
-5

Könnten Sie die platzieren vergessen Hauptklasse und Testfallklasse in / src / test / java. Überprüfen Sie es einmal.

Sathya
quelle
1
java.lang.ClassNotFoundException tritt auf, wenn die Klasse bereits kompiliert ist, aber zur Laufzeit, da der Klassenpfad nicht richtig festgelegt wurde.
Nitin Mahesh