Le moyen le plus simple (avec le moins de nouveau code requis) pour ce faire est d'exécuter le test en tant que test paramétré (annoter avec @RunWith(Parameterized.class)
et ajouter une méthode pour fournir 10 paramètres vides). De cette façon, le framework exécutera le test 10 fois.
Ce test devrait être le seul test de la classe, ou mieux, toutes les méthodes de test devraient être exécutées 10 fois dans la classe.
Voici un exemple:
@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");
}
}
Avec ce qui précède, il est même possible de le faire avec un constructeur sans paramètre, mais je ne suis pas sûr si les auteurs du framework l'ont voulu, ou si cela se cassera à l'avenir.
Si vous implémentez votre propre coureur, vous pouvez demander au coureur d'exécuter le test 10 fois. Si vous utilisez un runner tiers, avec 4.7, vous pouvez utiliser la nouvelle @Rule
annotation et implémenter l' MethodRule
interface afin qu'elle prenne l'instruction et l'exécute 10 fois dans une boucle for. L'inconvénient actuel de cette approche est que @Before
et @After
s'exécuter qu'une seule fois. Cela changera probablement dans la prochaine version de JUnit (le @Before
fonctionnera après le @Rule
), mais quoi qu'il en soit, vous agirez sur la même instance de l'objet (ce qui n'est pas vrai pour le Parameterized
coureur). Cela suppose que le coureur avec lequel vous exécutez la classe reconnaît correctement les @Rule
annotations. Ce n'est le cas que s'il délègue aux coureurs JUnit.
Si vous exécutez avec un coureur personnalisé qui ne reconnaît pas l' @Rule
annotation, vous êtes vraiment obligé d'écrire votre propre coureur qui délègue de manière appropriée à ce coureur et l'exécute 10 fois.
Notez qu'il existe d'autres moyens de résoudre ce problème (comme le runner Theories), mais ils nécessitent tous un runner. Malheureusement, JUnit ne prend actuellement pas en charge les couches de coureurs. C'est un coureur qui enchaîne d'autres coureurs.