La forma más fácil (como se requiere la menor cantidad de código nuevo) de hacer esto es ejecutar la prueba como una prueba parametrizada (anotar con @RunWith(Parameterized.class)
y agregar un método para proporcionar 10 parámetros vacíos). De esa manera, el marco ejecutará la prueba 10 veces.
Esta prueba debería ser la única prueba en la clase, o mejor dicho, todos los métodos de prueba deberían ejecutarse 10 veces en la clase.
Aquí hay un ejemplo:
@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 lo anterior, es posible incluso hacerlo con un constructor sin parámetros, pero no estoy seguro de si los autores del marco lo pretendieron, o si eso se romperá en el futuro.
Si está implementando su propio corredor, puede hacer que el corredor ejecute la prueba 10 veces. Si está utilizando un corredor de terceros, entonces con 4.7, puede usar la nueva @Rule
anotación e implementar la MethodRule
interfaz para que tome la declaración y la ejecute 10 veces en un ciclo for. El inconveniente actual de este enfoque es que @Before
y @After
conseguir ejecutar sólo una vez. Es probable que esto cambie en la próxima versión de JUnit ( @Before
se ejecutará después de @Rule
), pero independientemente de que va a actuar en la misma instancia del objeto (algo que no es cierto para el Parameterized
corredor). Esto supone que cualquier corredor con el que esté ejecutando la clase reconoce correctamente las @Rule
anotaciones. Ese es solo el caso si está delegando a los corredores JUnit.
Si está ejecutando con un corredor personalizado que no reconoce la @Rule
anotación, entonces realmente tiene que escribir su propio corredor que delegue apropiadamente en ese corredor y lo ejecute 10 veces.
Tenga en cuenta que hay otras formas de resolver esto potencialmente (como el corredor de Teorías), pero todas requieren un corredor. Desafortunadamente, JUnit actualmente no admite capas de corredores. Ese es un corredor que encadena a otros corredores.