Keine Tests mit Testläufer 'JUnit 4' gefunden

105

Mein Java-Test hat mit Eclipse gut funktioniert. Wenn ich den Test jetzt über das Ausführungsmenü neu starte, wird folgende Meldung angezeigt:

No tests found with test runner 'JUnit 4'

In der .classpathDatei habe ich alle jarDateien und am Ende habe ich:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

Wie kann ich diesen Fehler beheben und die Tests erneut ausführen?

user281070
quelle
1
Können Sie den Inhalt Ihres Tests (oder zumindest die Klassendeklaration) veröffentlichen? Auch du hast "am Ende haben:" mit nichts anderem geschrieben.
Phtrivier
Überprüfen Sie dieses .. es sollte helfen stackoverflow.com/questions/22469480/junit-no-tests-found
prasad vsv
Für den 5.
Juni

Antworten:

155

das ist mir gerade passiert. Das Neuerstellen oder Neustarten von Eclipse hat nicht geholfen.

Ich habe es gelöst, indem ich eine der Testmethoden umbenannt habe, um mit "test ..." (JUnit3-Stil) zu beginnen, und dann wurden alle Tests gefunden. Ich habe es wieder in das umbenannt, was es vorher war, und es funktioniert immer noch.

Deutsche
quelle
7
Ich habe Methode wie testQuoteszusammen mit anderen Methoden, die nicht mit Test beginnen, aber ich bekomme immer noch keine Tests gefunden Fehler
Rachel
1
Ich hatte das gleiche Problem mit einer Klasse, die erweitert wurde junit.framework.TestCase, und meine Methoden mussten mit "test" beginnen. Anstatt zu erweitern TestCase, habe ich einen Import hinzugefügt: import static org.junit.Assert.*;und ich kann meine Methoden so benennen, wie ich möchte. Bizarr ...
MrDrews
6
Im Ernst, selbst wenn ein Test mit @Test kommentiert ist, muss dem Namen der Testfunktion immer noch "test" vorangestellt werden?
Brian Shotola
4
Sie können dieser Liste auch 2015 und Eclipse Luna hinzufügen. Tatsächlich beginnen viele meiner @ Test-Methoden immer noch mit dem Präfix "test". Ich entfernte , dass die Vorsilbe auf einem Test gespeichert, und dann wurden alle Tests gefunden. Danach fügte ich es wieder hinzu und alle Tests wurden weiterhin gefunden. Es scheint mehr darum zu gehen, eine Methode (Datei?) So zu ändern, dass Eclipse alles neu entdeckt.
Brian White
2
Android Studio 2.1.1, Mai 2016, funktioniert immer noch. Ich frage mich, ob diese Antwort bis zum Ende des Universums funktionieren wird.
Blueriver
42

Wenn wir diese Fehler erhalten, scheint Eclipse nur verwirrt zu sein. Starten Sie Eclipse neu, aktualisieren Sie das Projekt, bereinigen Sie es, lassen Sie Eclipse es neu erstellen und versuchen Sie es erneut. Meistens funktioniert das wie ein Zauber.

JamesG
quelle
1
Yep hat auch für mich gearbeitet und ist mit Dlamblin einverstanden. Gute Erinnerung daran, immer einen Neustart für ein seltsames Problem zu versuchen, das in den ersten 5 Minuten nach dem Anstoßen nicht gelöst werden kann.
Thien
3
Ich hatte dieses Problem und schloss die Quelldatei, in der ich meine Testklasse definiert hatte, doppelklickte im Navigator auf diese Datei und es funktionierte. Das Schließen und erneute Öffnen der Datei funktionierte also, ohne Eclipse neu zu starten.
Metamatt
11
das bringt mich wirklich dazu, nach einer neuen IDE zu suchen. das hat bei mir funktioniert.
Seth M.
1
Das Schließen und Wiedereröffnen des Projekts hat es für mich behoben!
Martin Charlesworth
34

Wählen Sie im Kontextmenü Ihres 'Test'-Verzeichnisses' Erstellungspfad '->' Als Quellordner verwenden '. Eclipse sollte Ihre unitTests.java-Dateien als Quelldateien sehen. Die Warnung "Keine JUnit-Tests gefunden" tritt auf, da sich in Ihrem "Build" -Verzeichnis keine unitTests.class-Dateien befinden

Dima
quelle
Dies ist die Lösung, die für mich funktioniert. Neustart funktioniert nicht.
Andree
Dies ist, wonach ich gesucht habe, da ich den Ordner "test" nicht im Ordner "src" haben muss. Ich habe dies getan, dann das Projekt geöffnet / geschlossen, wie in den anderen Antworten vorgeschlagen, und jetzt wird es kompiliert und als JUnit-Test ausgeführt. Vielen Dank!
Quux00
Ich habe das gleiche getan, indem ich das Projekt -> Java-Erstellungspfad -> Quelle -> Testordner hinzugefügt habe. Danke vielmals!
Peter Klausel
Wenn sich src / test / groovy bereits als Quellordner in Ihrem Erstellungspfad befindet, entfernen Sie ihn und fügen Sie ihn erneut hinzu. Einfacher als das Entfernen und Ersetzen von @Test in jeder Testdatei ...
geneSummons
31

Überprüfen Sie, ob Ihre Testklasse "TestCase" erweitert. Wenn ja, entfernen Sie diese Klausel. Ihre Klasse muss nicht von der "TestCase" -Klasse erweitert werden. Es sind die meisten Fälle, die ich getroffen habe.

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

Der folgende TestCase sollte in Ordnung sein.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine
Nephilim
quelle
Es ist in der Tat die richtige Antwort. Ich habe es mit IntelliJ und JUnit 4.1 getestet und es funktioniert!
Dio Phung
Das Problem, mit dem ich konfrontiert bin, ist, dass meine JUnit-Tests in Eclipse einwandfrei ausgeführt werden. Wenn ich sie jedoch in eine JAR exportiere, wird der obige Fehler angezeigt. Irgendwelche Ideen?
versuchen,
Ist es heutzutage umgekehrt? Das Hinzufügen von "erweitert TestCase" löste das Problem für mich.
Heinzlmaen
27

Ich hatte das gleiche Problem und habe es an schlechten Beispielen im Web und in den Interna von junit getestet. Lassen Sie Ihre Klasse TestCase grundsätzlich nicht erweitern, wie einige Beispiele für Junit 4.x zeigen. Verwenden Sie eine Namenskonvention Test oder wenn Sie eine Anmerkung haben möchten, können Sie @RunWith (JUnit4.class) verwenden.

Wenn Sie Zugriff auf Assert-Methoden benötigen, erweitern Sie Assert oder verwenden Sie statische Importe.

Wenn Ihre Klasse TestCase erweitert, wird sie selbst bei Verwendung von Junit 4 Runner als 3 ausgeführt. Dies liegt daran, dass im Initialisierungscode Folgendes erkannt wird:

Siehe JUnit3Builder und die Zeilen:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

Dies gibt true zurück und der Test auf Junit4-Kompatibilität wird nicht versucht.

toomasr
quelle
2
Dies löste das Problem für mich. Wenn Sie sich zuerst die älteren Beispiele für die Verwendung von Junit ansehen, werden Sie in die Irre geführt.
Alex Kilpatrick
"Wenn Ihre Klasse TestCase erweitert, wird sie selbst bei Verwendung von Junit 4 Runner als 3 ausgeführt" - dies gilt nicht (zumindest für Groovy und Intellij IDEA). Ich verwende JUnit 4.12 und habe die Klasse mit @RunWith(JUnit4)"GroovyTestCase" kommentiert und erweitert. Ohne dass @RunWith(JUnit4)ich vor den gleichen Problemen stehe.
Veaceslav Gaidarji
Das Verhalten ist immer noch das gleiche wie ab 2017 (JUnit 4.12).
Sharmaap
5

Versuchen Sie es mit Hinzufügen

@ Test über der Methode für den Test wie folgt

@Test
public void testParse()
{

}
Mike Choi
quelle
5

Eine weitere mögliche Lösung, die ich in den Ring werfen werde: Ich konnte die Testklasse weder über das Editorfenster noch über den Paket-Explorer ausführen, sondern mit der rechten Maustaste auf den Klassennamen in der Gliederungsansicht klicken und Als JUnit ausführen auswählen Test hat funktioniert ... Go figure!

Matthew Wise
quelle
Aus der Gliederungsansicht funktioniert es, alles andere funktioniert nicht - ich habe jede Lösung ausprobiert, die in 3 Stapelüberlauf-Threads veröffentlicht wurde, nichts funktioniert
MPSL
Dies funktioniert auch für mich, ist jedoch für das Testen der Abdeckung eines Projekts nutzlos.
Rich
4

Keine Testanzüge in JUnit4. Verwenden Sie stattdessen Anmerkungen oder alte JUnit3-Namenskonventionen.

Beispiel:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
Roman C.
quelle
4

Das ist mir auch passiert. Ich habe versucht, Eclipse neu zu starten, und meinen Testmethoden Tests vorangestellt. Beides hat nicht funktioniert.

Der folgende Schritt hat funktioniert: Ändern Sie alle in @BeforeClass und @AfterClass vorhandenen Testmethoden in statische Methoden.

dh wenn Sie Ihre Testmethode im folgenden Format haben:

@BeforeClass
public void testBeforeClass(){
}

dann ändern Sie es zu:

@BeforeClass
public static void testBeforeClass(){
}

Das hat bei mir funktioniert.

Revindran
quelle
4

Ich habe die Antwort herausgefunden:

Ich habe diesen Fehler erhalten, als ich den Test eigenständig von Eclipse ausgeführt habe (klicken Sie mit der rechten Maustaste auf die Methode und wählen Sie, ob sie als Junit-Test ausgeführt werden soll).

Als ich die komplette Klasse als Junit-Test ausgeführt habe, wurde der Test korrekt mit den Parametern ausgeführt.

Eyal Zamir
quelle
3

Wenn ich auf dieses Problem stoße, bearbeite ich einfach die Datei und speichere sie ... funktioniert wie ein Zauber

Mahesh
quelle
1
Hallo Kumpel und willkommen bei Stackoverflow! :) Könnten Sie bitte Ihre Antwort ausarbeiten?
Littm
@ Mahesh Sie meinen, aktualisieren Sie die Datei (wählen Sie sie aus und drücken Sie F5)
Cassian
Ich habe das gleiche Problem mit Scala, dh meine Tests sind für JUnit4 geschrieben, aber sie sind in Scala. Und die Lösung besteht, wie @Mahesh vorschlägt, darin, dem Compiler einen Kick zu geben. Es spielt keine Rolle, was Sie tun, wenn Sie die Datei bearbeiten, Sie müssen sie nur bearbeiten. Ich tippe etwas ein, das einen Syntaxfehler verursacht, speichere die Datei, mache sie dann rückgängig und speichere sie erneut. Plötzlich laufen meine Tests. Das passiert mir häufig, dh mindestens jeden Tag, normalerweise mehrmals am Tag.
Erick G. Hagstrom
3

Mein Problem war, dass die Deklaration import org.junit.Test;verschwunden ist (oder nicht hinzugefügt wurde?). Nachdem ich es hinzugefügt hatte, musste ich eine weitere importDeklaration entfernen (Eclipse gibt Ihnen einen Hinweis darauf, welche) und alles begann wieder zu funktionieren.

Sergii
quelle
3

Sehr spät, aber was das Problem für mich löste, war, dass meine Testmethodennamen alle mit Großbuchstaben begannen: "public void Test". Das t Kleinbuchstaben funktioniert.

Josh T.
quelle
das funktioniert bei mir ... aber das ist seltsamerweise eine verwirrende Lösung
Anchit Mittal
2

Ich habe die Lösung von Germán ausprobiert. Es hat für alle Methoden meiner Klasse funktioniert, aber ich habe viele Klassen in meinem Projekt.

Also habe ich versucht, aus dem Erstellungspfad zu entfernen und ihn dann erneut hinzuzufügen. Es hat perfekt funktioniert.

Ich hoffe es hilft.

Footix29
quelle
2

Sechs Jahre später ... und es gibt immer noch Probleme mit Eclipse und gelegentlich keine JUnits zu finden.

In meinem Eclipse Mars 2 habe ich festgestellt, dass von git gezogene Testklassen nicht erkannt werden, wenn @Testdie Datei mehr als 9 oder 10 Anmerkungen enthält. Ich muss zusätzliche Tests auskommentieren, die Testklasse ausführen, sie dann auskommentieren und die Klasse erneut ausführen. Stelle dir das vor...

SimonB
quelle
Diese Antwort hier ist hilfreich, ich hatte nicht genau die gleiche Situation, aber die Namen der Testmethoden waren ziemlich ähnlich und Eclipse hatte Probleme, sie zu finden. Wie testCase01, testCare02 ... musste ich andere "testCasexx" -Methoden kommentieren, um testCase01 auszuführen, sonst wird eine Ausnahme ausgelöst. Wenn Sie alle Testmethoden öffentlich machen, scheint dieses Problem behoben zu sein !!
01000001
1

Möglicherweise war Ihre JUnit-Startkonfiguration für eine einzelne Testklasse bestimmt, und Sie haben diese Konfiguration irgendwie geändert, um "alle Tests in einem Quellordner, Paket oder Projekt auszuführen".

Dies könnte jedoch die Fehlermeldung "Keine Tests mit Testläufer 'JUnit 4' gefunden" auslösen.

Oder Sie haben eine Änderung in Ihrer Testklasse vorgenommen und die @TestAnmerkung entfernt.
Siehe diese Wiki-Seite .

VonC
quelle
@ Test ist hier, die Nachricht lautet: Hauptklasse toto.lolo.testrunner (die in der Ausführungskonfiguration angegeben ist) konnte nicht gefunden werden
user281070
@lamisse: Also, eine Art Klassenpfadproblem? oder ein Syntex-Problem: Es sollte sein toto.lolo.Testrunnerund nicht toto.lolo.testrunner('T')
VonC
@lamisse: Ist "toto.lolo.Testrunner" der tatsächliche Name Ihrer TestRunner-Klasse? Hast du das geschrieben? Befindet sich das Projekt / JAR im Klassenpfad Ihrer Startkonfiguration?
Phtrivier
1

Das gleiche Problem trat auch beim Ausführen des JUnit-Tests auf. Ich habe dieses Problem behoben, indem ich die Anmerkung @Test direkt über der Haupttestfunktion platziert habe.

Rajith
quelle
1

Was meinen Fall behebt, ähnelt der Antwort von @ JamesG: Ich habe Eclipse neu gestartet, das Projekt neu erstellt und aktualisiert. ABER bevor ich etwas davon tat, schloss ich zuerst das Projekt (Rechtsklick auf Projekt im Paket-Explorer -> Projekt schließen) und öffnete es dann erneut. Dann hat es funktioniert.

Eine Problemumgehungslösung, die ich gefunden habe, bevor ich die ultimative Lösung gefunden habe, die ich gerade beschrieben habe: Kopieren Sie die Testklasse und führen Sie die Testklasse als JUnit aus.

cellepo
quelle
1

Überprüfen Sie, ob der Ordner, in dem sich Ihre Tests befinden, ein Quellordner ist. Wenn nicht - Rechtsklick und als Quellordner verwenden.

Todor Kolev
quelle
1

Schließen und öffnen Sie das Projekt, das für mich funktioniert hat.

user3022123
quelle
1

Es besteht eine weitere Möglichkeit, dass Sie den Junit-Test von einer niedrigeren Version (z. B. Junit 3) auf Junit 4 geändert haben. Befolgen Sie dazu die folgenden Schritte: -

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.
Kundan Atre
quelle
1

Fügen Sie zusätzlich @Testzu Ihrem Test hinzu.
Bewegen Sie den Mauszeiger zur Anmerkung.
Wählte 'Junit 4-Bibliothek zum Klassenpfad hinzufügen'

Mike
quelle
0

Basiert Ihr Eclipse-Projekt auf Maven? In diesem Fall müssen Sie möglicherweise die m2eclipse-Version aktualisieren.

Nur eine kurze Anmerkung: Ich habe ein Projekt in Eclipse, das auf Maven basiert und zunächst mit dem Assistenten "Neues Maven-Projekt" in Eclipse generiert wurde. Ich verwende JUnit 4.5 für die Komponententests und konnte die Tests über die Befehlszeile mit maven und einzelne Tests von Eclipse mit run als JUnit-Test problemlos ausführen. Als ich jedoch versuchte, alle Tests auszuführen Im Projekt beschwerte sich Eclipse durch Aufrufen von run as JUnit test ... auf dem Projektstammknoten " Keine Tests mit Test Runner Junit 4 gefunden ". Dies wurde durch ein Upgrade von m2eclipse auf den neuesten stabilen Entwicklungs-Build von der m2eclipse-Update-Site behoben (insbesondere ein Upgrade von Version 0.9.8.200905041414 auf Version 0.9.9.200907201116 in Eclipse Galileo).

Von hier aus: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

Brühe
quelle
Ich verstehe nicht, ich glaube nicht, dass es mit der Eclispe-Version zusammenhängt, mein Test hat gestern funktioniert und ist jetzt aufgrund des Junit-Start-Popups nicht der Fall. Gibt es eine Möglichkeit, meine erste Konfiguration wiederherzustellen?
user281070
Lamisse, ich bin auch verwirrt. Ich schlage vor, dass Sie Ihre Frage aktualisieren, um zu erklären, wann der Unit-Testlauf funktioniert und wann er nicht funktioniert.
b.roth
0

Das ist mir auch passiert. Ich habe festgestellt, dass ich in Eclipse keine neue Java-Klassendatei erstellt habe und deshalb nicht kompiliert wurde. Versuchen Sie, Ihren Code in eine Java-Klassendatei zu kopieren, falls dieser noch nicht vorhanden ist, und kompilieren Sie ihn dann.

Anna
quelle
0

Ich fand heraus, dass Eclipse nur dann Tests im JUnit 3-Stil durchführt, wenn sich Ihre Testklasse von erstreckt TestCase. Wenn Sie die Vererbung entfernen, haben die Anmerkungen für mich funktioniert.

Beachten Sie, dass Sie alle erforderlichen assert*Methoden wie statisch importieren müssen import static org.junit.Assert.*.

Martin C.
quelle
0

Ich musste ein mvn clean in der Kommandozeile machen und dann project-> clean in eclipse. Ich habe die Klasse vorher umbenannt und dann wieder umbenannt, aber ich bezweifle, dass das geholfen hat.

Joe andere Seite
quelle
0

Ich verwende Eclipse auch mit Maven (m2e 1.4). Die Tests liefen mit Maven, aber nicht mit Eclipse ... auch nach mehrmaliger Anwendung von Maven>Update project.

Meine Lösung bestand darin, dem von m2e generierten .classpath einige Zeilen hinzuzufügen. Die Linien kleben jetzt.

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>
Pascal
quelle
0

Ich habe dieses Problem von Zeit zu Zeit. Die Lösung, die das Problem für mich am meisten löst, besteht darin, den JUnit-Test über Ausführungskonfigurationen auszuführen ... um sicherzustellen, dass JUnit 4 als Testläufer festgelegt ist.

Im Allgemeinen tritt dieses Problem auf, wenn versucht wird, den Test als ... Junit-Test über das Kontextmenü im Paket-Explorer auszuführen. Wenn Sie mit der rechten Maustaste auf den Code für den Test klicken, den Sie ausführen möchten, und anstatt Ausführen als ... Junit-Test auswählen, wählen Sie Konfigurationen ausführen aus. Stellen Sie sicher, dass Projekt, Testklasse und Testläufer korrekt eingestellt sind. Klicken Sie auf Übernehmen und dann auf Ausführen arbeitet die ganze Zeit für mich.

theINtoy
quelle
0

Ich habe angefangen, in meinem Job mit Selenium und Eclipse zu arbeiten, und ich habe meinen ersten automatisierten Test durchgeführt. Ich habe aus den Codes @Before, @Test und @After Notizen gelöscht und hatte das Problem "Keine Tests mit Testrunner junit4 gefunden". .

Meine Lösung bestand einfach darin, die Notizen @Before, @Test und @After erneut hinzuzufügen, und damit funktionierte mein Skript. Es ist wichtig, dies nicht aus dem Code zu löschen.

Dies ist ein einfacher Test, bei dem Google nach etwas sucht:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}
JuanTorre
quelle
0

Bei Verwendung von ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) hatte ich ein ähnliches Problem mit dem Right Click Scala Test Class-> Run As -> Scala Junit TestKontextmenü.

Ich habe versucht, die Klasse zu bearbeiten (aber nicht wegen eines Kompilierungsfehlers), zu bereinigen, das Projekt zu schließen und Eclipse zu schließen. Keiner von diesen hat das Kontextmenü für Klassen wiederhergestellt, die zuvor gut funktioniert hatten. Die Testklassen verwenden nicht die @TestAnnotation, sondern die @RunWith(classOf[JUnitRunner])Annotation am oberen Rand der Klasse mit ScalaTest-Code.

Als ich versuchte, Scala Junit Testdirekt aus dem Starteditor für die Konfiguration der Konfiguration auszuwählen, erhielt ich den Dialog aus der Frage. Die Antwort von Footix29 war der Schlüssel für mich.

Ich bemerkte, dass meine Klassen im Verzeichnis / bin, obwohl ich mein Projekt einige Male bereinigt hatte, seit einiger Zeit nicht mehr neu erstellt wurden.

So kam ich zum Kontextmenü zurück und konnte Scala Junit Tests erneut ausführen :

  • manuallybereinigte die Klassen durch Löschen des /bin/<package dir>*Via-Explorers
  • Project -> Cleandas Projekt zusammen mit einem vollständigen Umbau

Ich vermute, dass eine Klassenbearbeitung im Allgemeinen in der Lage ist, einen gespeicherten Status von Eclipse zu bereinigen und wieder in Gang zu bringen. In meinem Fall waren alle zuvor von mir ausprobierten Arbeiterklassen gescheitert, sodass der manualsaubere Schritt genau der Hammer war, den ich brauchte. Es sollten jedoch auch andere Tricks funktionieren, die sich auf das Eclipse-Konzept des Klassenpfads / Build-Status auswirken.

Außerdem denke ich, dass dieses Verhalten teilweise durch den Versuch ausgelöst wurde, eine Scala-Klasse durch Umbenennen (an der die Scala Eclipse-IDE scheiße ist) umzugestalten, wobei die gesamte Bereinigung nach der ersten Dateiänderung manuell erfolgt. Es gab keine Build-Fehler, aber es gab auch keine Warnungen, die ich erwartet hatte, was bedeutet, dass definitiv etwas in den Build-Statusinformationen von Eclipse steckt.

n0741337
quelle