Der einfachste Weg (da nur die geringste Menge an neuem Code erforderlich ist) besteht darin, den Test als parametrisierten Test auszuführen (mit einem zu kommentieren @RunWith(Parameterized.class)
und eine Methode hinzuzufügen, um 10 leere Parameter bereitzustellen). Auf diese Weise führt das Framework den Test zehnmal aus.
Dieser Test muss der einzige Test in der Klasse sein, oder besser gesagt, alle Testmethoden müssen zehnmal in der Klasse ausgeführt werden.
Hier ist ein Beispiel:
@RunWith(Parameterized.class)
public class RunTenTimes {
@Parameterized.Parameters
public static Object[][] data() {
return new Object[10][0];
}
public RunTenTimes() {
}
@Test
public void runsTenTimes() {
System.out.println("run");
}
}
Mit dem oben Gesagten ist es sogar möglich, dies mit einem parameterlosen Konstruktor zu tun, aber ich bin mir nicht sicher, ob die Framework-Autoren dies beabsichtigt haben oder ob dies in Zukunft nicht mehr funktioniert.
Wenn Sie Ihren eigenen Läufer implementieren, kann der Läufer den Test zehnmal ausführen. Wenn Sie einen Runner eines Drittanbieters verwenden, können Sie mit 4.7 die neue @Rule
Annotation verwenden und die MethodRule
Schnittstelle so implementieren , dass sie die Anweisung aufnimmt und sie zehnmal in einer for-Schleife ausführt. Der aktuelle Nachteil dieses Ansatzes ist , dass @Before
und @After
erhält nur einmal ausgeführt. Dies wird sich wahrscheinlich in der nächsten Version von JUnit ändern (die @Before
wird nach der ausgeführt @Rule
), aber unabhängig davon, ob Sie auf dieselbe Instanz des Objekts reagieren (etwas, das für den Parameterized
Läufer nicht zutrifft ). Dies setzt voraus, dass jeder Läufer, mit dem Sie die Klasse ausführen, die @Rule
Anmerkungen korrekt erkennt . Dies ist nur dann der Fall, wenn es an die JUnit-Läufer delegiert.
Wenn Sie mit einem benutzerdefinierten Runner arbeiten, der die @Rule
Anmerkung nicht erkennt , müssen Sie wirklich Ihren eigenen Runner schreiben, der entsprechend an diesen Runner delegiert und ihn zehnmal ausführt.
Beachten Sie, dass es andere Möglichkeiten gibt, dies möglicherweise zu lösen (z. B. den Theories-Läufer), für die jedoch alle ein Läufer erforderlich ist. Leider unterstützt JUnit derzeit keine Schichten von Läufern. Das ist ein Läufer, der andere Läufer kettet.