Il modo più semplice (come minimo quantità di nuovo codice richiesto) per farlo è eseguire il test come un test parametrizzato (annotare con un @RunWith(Parameterized.class)
e aggiungere un metodo per fornire 10 parametri vuoti). In questo modo il framework eseguirà il test 10 volte.
Questo test dovrebbe essere l'unico test nella classe, o meglio mettere tutti i metodi di test dovrebbero essere eseguiti 10 volte nella classe.
Ecco un esempio:
@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");
}
}
Con quanto sopra, è possibile farlo anche con un costruttore senza parametri, ma non sono sicuro se gli autori del framework lo intendessero o se ciò si interromperà in futuro.
Se stai implementando il tuo corridore, potresti fare in modo che il corridore esegua il test 10 volte. Se stai usando un runner di terze parti, allora con 4.7, puoi usare la nuova @Rule
annotazione e implementare l' MethodRule
interfaccia in modo che prenda l'istruzione e la esegua 10 volte in un ciclo for. Lo svantaggio attuale di questo approccio è che @Before
e @After
ottenere eseguito solo una volta. Questo probabilmente cambierà nella prossima versione di JUnit ( @Before
verrà eseguito dopo il @Rule
), ma indipendentemente dal fatto che agirete sulla stessa istanza dell'oggetto (qualcosa che non è vero per il Parameterized
corridore). Ciò presuppone che qualunque corridore con cui stai conducendo la classe riconosca correttamente le @Rule
annotazioni. Questo è solo il caso se sta delegando ai corridori JUnit.
Se stai correndo con un corridore personalizzato che non riconosce l' @Rule
annotazione, allora sei davvero bloccato nel dover scrivere il tuo corridore che delega in modo appropriato a quel corridore e lo esegue 10 volte.
Nota che ci sono altri modi per risolverlo potenzialmente (come il corridore di Theories) ma tutti richiedono un corridore. Sfortunatamente JUnit attualmente non supporta livelli di corridori. Questo è un corridore che incatena altri corridori.