So führen Sie alle Tests aus, die zu einer bestimmten Kategorie in JUnit gehören 4
JUnit 4.8 enthält ein nettes neues feature namens "Kategorien", die ermöglicht es Ihnen, bestimmte Arten von Prüfungen zusammen. Dies ist sehr nützlich, z.B. um separate Testläufe für die langsame und schnelle tests. Ich weiß, die Sachen, die erwähnt JUnit 4.8 release noteswürde aber gerne wissen, wie kann ich eigentlich laufen alle tests, versehen mit bestimmten Kategorie.
JUnit 4.8 release notes zeigen ein Beispiel suite definition, wo SuiteClasses annotation wählt die tests von bestimmten Kategorie zu führen, wie diese:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) //Note that Categories is a kind of Suite
public class SlowTestSuite {
//Will run A.b and B.c, but not A.a
}
Weiß jemand, wie ich laufen konnte in allen tests SlowTests Kategorie? Es scheint, dass Sie müssen die SuiteClasses Anmerkung...
InformationsquelleAutor der Frage Kaitsu | 2010-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich heraus, einen möglichen Weg zu erreichen, was ich will, aber ich denke nicht, dass dies die bestmögliche Lösung, da es stützt sich auf ClassPathSuite Bibliothek, die nicht Teil von JUnit.
Definiere ich die test-suite für langsame tests wie dieser:
AllTests-Klasse ist wie folgt definiert:
Musste ich ClassPathSuite Klasse aus ClassPathSuite Projekt hier. Es finden sich alle Klassen mit tests.
InformationsquelleAutor der Antwort Kaitsu
Hier sind einige der wichtigsten Unterschiede zwischen TestNG und JUnit, wenn es um Gruppen (oder Kategorien, wie JUnit ruft Ihnen zu):
JUnit-s eingegeben werden (Anmerkungen), während TestNG ist, sind Zeichenketten. Ich habe diese Wahl, weil ich wollte in der Lage sein, die Verwendung regulärer Ausdrücke bei der Ausführung von tests, zum Beispiel "führen Sie alle tests gehören zu der Gruppe "Datenbank*". Auch, dass Sie eine neue annotation, wenn Sie eine neue Kategorie anlegen ist lästig, aber es hat den Vorteil, dass eine IDE will Ihnen gleich sagen, wo diese Kategorie verwendet (TestNG, zeigt Sie dies in Ihren berichten).
TestNG trennt sehr deutlich Ihre statische Modell (der code der tests) aus dem Laufzeit-Modell (die tests laufen zu bekommen). Wenn Sie möchten, führen Sie die Gruppen "front-end" und dann, "servlets", Sie können dies tun, ohne neu kompilieren zu müssen, nichts. Da JUnit definiert Gruppen in Anmerkungen und Sie müssen angeben, werden diese Kategorien, die als Parameter für die Läufer, Sie haben in der Regel kompilieren Sie Ihren code, wenn Sie möchten, führen Sie einen anderen Satz von Kategorien, die Niederlagen der Zweck meiner Meinung nach.
InformationsquelleAutor der Antwort Cedric Beust
Einen Nachteil Kaitsu Lösung ist, dass Eclipse ausgeführt werden die tests zweimal, und die SlowTests 3 mal, beim laufen alle tests in einem Projekt. Dies ist, weil die Eclipse führen Sie alle tests, dann wird der AllTests-suite, dann die SlowTestSuite.
Hier ist eine Lösung, die umfasst das erstellen von Unterklassen der Kaitsu Lösung, die test-Läufer überspringen die Suiten, es sei denn, eine bestimmte system-Eigenschaft gesetzt ist. Eine beschämende hack, aber alles, was ich habe kommen mit so weit.
.
.
.
.
So, in Ihrem FastTestSuite launcher, fügen Sie einfach-Drun.dev.Einheit.tests=true die VM-Argumente. (Beachten Sie, dass diese Lösung verweist auf ein schnell-test-suite-statt langsam.)
InformationsquelleAutor der Antwort Kevin Wong
Laufen kategorisiert tests ohne Angabe, alle von Ihnen explicily in
@Suite.SuiteClasses
Anmerkung Sie können Ihre eigene Implementierung der Suite.Zum Beispiel ein
org.junit.runners.ParentRunner
erweitert werden kann. Statt der Verwendung einer Reihe von Klassen zur Verfügung gestellt von@Suite.SuiteClasses
neue Implementierung sollte die Suche für Sie kategorisiert tests im classpath.Sehen dieses Projekt als ein Beispiel für einen solchen Ansatz.
Verwendung:
InformationsquelleAutor der Antwort stanislau
Ich bin mir nicht sicher, was genau dein problem ist.
Fügen Sie einfach alle tests zu einer suite (oder hirachy der Suiten). Dann verwenden Sie die Kategorien Läufer und Include/ExcludeCategory Anmerkungen, Angabe der Kategorien, die Sie ausführen möchten.
Könnte es eine gute Idee sein, über eine suite mit all den tests, und ein paar separate Suiten verweisen auf die erste, die Angabe der verschiedenen Kategorien, die Sie brauchen.
InformationsquelleAutor der Antwort Jens Schauder
Nicht eine direkte Antwort auf dein problem, aber vielleicht ist der Allgemeine Ansatz verbessert werden könnte...
Warum sind Ihre tests so langsam? Vielleicht ist das set-up dauert lange (Datenbank -, I/O, usw.), vielleicht sind die tests auch die Prüfung zu viel? Wenn dies der Fall ist, würde ich teilen Sie die echte unit-tests aus dem "long-running", die oft in der Tat sind die Integrationstests.
In meine setups habe ich die Inszenierung env, wo unit-tests werden oft und integration-tests ständig, aber eher selten (z.B. nach jedem commit in die Versionskontrolle). Ich war noch nie mit der Gruppierung für unit-tests, denn Sie sollen lose gekoppelt insgesamt. Ich arbeite nur mit Gruppierung und die Beziehung von test-Fällen in der integration-test-setups (aber mit TestNG).
Aber gut zu wissen, dass JUnit 4.8 eingeführt, einige Gruppierung von Funktionen.
InformationsquelleAutor der Antwort manuel aldana