2013-10-04 6 views
5

Ich habe eine Reihe von Tests geschrieben, die nicht nur in separate Klassen aufgeteilt sind, sondern, je nachdem, welchen Bereich meiner Anwendung sie testen, in separate Unterpakete. So sieht mein Paket-Struktur ein bisschen wie folgt aus:Ausführen von JUnit4-Testklassen in der angegebenen Reihenfolge

my.package.tests 
my.package.tests.four 
my.package.tests.one 
my.package.tests.three 
my.package.tests.two 

Im my.package.tests Paket ich eine Elternklasse haben, die alle Tests in den Unterpaketen eins bis vier erstrecken. Nun möchte ich die Reihenfolge auswählen, in der die Tests ausgeführt werden; nicht innerhalb der Klassen (was mit der FixMethodOrder annotation möglich scheint), sondern die Reihenfolge der Klassen oder Teilpakete selbst (also diejenigen im Teilpaket one zuerst, dann die in two, ect.). Einige der Testklassen verwenden die Parameterized runner, nur für den Fall, dass es einen Unterschied macht. Die Auswahl der Reihenfolge ist nicht erforderlich, damit die Tests erfolgreich sind, sie sind unabhängig voneinander; Es wäre jedoch hilfreich, sie so zu sortieren, dass sie die Reihenfolge widerspiegeln, in der die verschiedenen Teile des Programms normalerweise verwendet werden, da dies die Analyse ein wenig einfacher macht.

Jetzt hätte ich am liebsten eine Konfigurationsdatei, die JUnit mitteilt, in welcher Reihenfolge die Tests ausgeführt werden sollen; Ich vermute jedoch, dass es nicht so einfach sein wird. Welche Möglichkeiten habe ich hier und was wäre die einfachste? Ich möchte auch nur die Unterpakete auflisten, nicht die verschiedenen Klassen in den Paketen oder sogar die Testfunktionen in den Klassen.

Ich benutze Java 1.6.0_26 (ich habe keine Wahl hier) und JUnit 4.11.

Antwort

7

Sie können dies mit Testsuiten tun. (Sie können diese auch "verschachteln")

@SuiteClasses({SuiteOne.class, SuiteTwo.class}) 
@RunWith(Suite.class) 
public class TopLevelSuite {} 

@SuiteClasses({Test1.class, Test2.class}) 
@RunWith(Suite.class) 
public class SuiteOne {} 


@SuiteClasses({Test4.class, Test3.class}) 
@RunWith(Suite.class) 
public class SuiteTwo {} 

... Und so weiter. Verwenden Sie "toplevelsuite" als Einstiegspunkt, und die Tests werden in der Reihenfolge ausgeführt, in der Sie das Array @SuiteClasses definieren.

Was die Methoden innerhalb einer Klasse, können Sie die Reihenfolge, wie sie mit @FixMethodOrder ausführen in spezifizieren (wie Sie bereits in Ihrer Frage erwähnt haben.

+0

Danke, das funktioniert wie ein Charme! Ich denke, es ist nicht die Option, um es irgendwie zu sagen "alle Tests im folgenden Paket ausführen" obwohl, richtig? – blalasaadri

+0

Nein, Sie können nicht automatisch sagen, dass alle Klassen in einem Paket (AFAIK, mindestens) enthalten. – blgt

+1

Die allgemeine Idee hier ist, dass Sie kann in jedes Paket eine Suite-Klasse einfügen, die alle Tests in diesem Paket enthält.Sie ​​legen dann Ihre "Eltern" -Suite in das übergeordnete Paket und schließen diese ein. Auf diese Weise imitieren Sie die Pakethierarchie in Ihren Suite-Klassen. – blgt

Verwandte Themen