Frage

Ich möchte alle Tests in einem Projekt können programmatisch auszuführen. Ich weiß, dass Eclipse-eine „Ausführen als JUnit-Test“ Konfiguration hat, die irgendwie alle Tests in einem Projekt packt und sie laufen. Gibt es für mich eine Möglichkeit, um auch die Liste der Tests programmatisch zu packen und sie laufen? Oder gibt es eine gute Möglichkeit, eine Test-Suite, die alle die Testfälle ohne manuell Auflistung aus jedem (alle 700+) von ihnen zu konstruieren?

Ich habe versucht, die "Neu ... -> Test Suite" Option in Eclipse, aber das scheint zu funktionieren nur für JUnit 3, Identifizierung Tests durch ihre von Testcase erstreckt

Die Testklassen sind JUnit 4, so dass ihr einziges Unterscheidungsmerkmal ist die Anmerkung, keine Namenskonvention, keine Subklassen von Testcase.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Auch wenn sie nicht wirklich Ihr unmittelbares Problem lösen, finde ich es ein sehr nützliches allgemeines Praxis-Suiten und Suiten Suiten zu schaffen, zum Beispiel für ein Paket etwas wie PackageFooSuite usw. und montieren diese Suiten in einem oder mehreren Suiten wieder, wie ModuleFooSuite und eine Top-Level-Suite haben, wie AllTestsSuite. Auf diese Weise ist es einfach, sowohl alle Tests in einem Schritt sowie Submodul Tests für das Paket laufen Ich bin derzeit arbeiten (und haben die Tests laufen schneller, als wenn ich würde immer alle von ihnen laufen):

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests

Andere Tipps

Keiner der anderen Antworten hat es für mich. Ich hatte 40k Tests, die ich brauchte, zu laufen, so dass manuell jede Klasse Listing war keine Option.

Ich habe es mit ClasspathSuite . Eine Test-Suite, die alle junit4 und Junit3 Testfälle in dem Klassenpfad läuft, ist wie folgt:

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        /* main method not needed, but I use it to run the tests */
        public static void main(String args[]) {
                JUnitCore.runClasses(RunAllSuite.class);
        }
}

Ich brauchte es von der Kommandozeile ausgeführt werden, so ist dies, was ich getan habe:

  1. Heruntergeladene cp-1.2.6.jar
  2. Erstellen Sie die zuvor erwähnten RunAllSuite
  3. Übersetzen der Klasse, javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
  4. führen Sie es mit Ziel Tests im Klassenpfad, java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar;path/to/runallsuite/folder;target/classes;target/test-classes RunAllSuite

Und das ist es. Mit dem RunAllSuite oben, überall in Ihrem Code können Sie einfach JUnitCore.runClasses tun (RunAllSuite.class), die alle Tests in Klassenpfad läuft. Es gibt noch andere Konfigurationsoptionen als auch die in der ClasspathSuite Homepage erläutert werden.

Beachten Sie auch, dass die Klasse oben angegeben nichts gedruckt. Wenn das erforderlich ist, können Sie

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import org.junit.internal.TextListener;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        public static void main(String args[]) {
                JUnitCore junit = new JUnitCore();
                junit.addListener(new TextListener(System.out));
                junit.run(RunAllSuite.class);
        }
}

Sie können dies recht einfach aus Maven mit der todsicheren Plugin : in der Regel sauber I / Kompilierung / meine Projekte von der Kommandozeile installieren, bevor sie für eclipse Nutzung (mvn eclipse:clean eclipse:eclipse) zu vergleichen und Sie können eine Testsuite in Ihre pom, die listet alle Tests, die Sie ausführen möchten en masse definieren jedes Mal, wenn mvn install laufen . Sie sind nicht sie programmatisch, genau nennen, aber man kann sich mit Sicherheit nennen en masse.

in Eclipse (Ich bin mit 4.6.1) - Recht der Projektordner klicken, wählen Sie "Ausführen als", wählen Sie "JUnit Test"

Es werden alle Tests in diesem Projekt. Das gleiche gilt für ein Paket.

Von der Spitze von meinem Kopf mit Spring:

  • Implementieren eines typefilter, dass Streichhölzer Klassen mit Methoden mit @Test kommentierten (vergessen Sie nicht die übergeordneten Klassen zu betrachten)
  • Invoke Classpath Scannen auf den meist Top-Testpaket
  • Rufen Sie den JUnitRunner mit den Scan-Ergebnissen

Weitere Informationen über Classpath Scannen und benutzerdefinierten Typ Filter hier

Mit Eclipse-Indigo (möglicherweise Helios auch) im Dialogfeld Run Konfigurationen, haben Sie jetzt die Möglichkeit haben, alle Tests in einem ausgewählten Projekt zu starten, ein Paket oder Quellordnern.

Auch eine gute Referenz von Eclipse ist der Artikel Java Unit-Tests mit JUnit 4.x in eclipse-.

Ich empfehle auch die JUnit Suite Annotationen verwenden. Folgen Sie den Link für weitere Informationen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top