Como dice el título, estoy buscando una forma simple de ejecutar las pruebas JUnit 4.x varias veces seguidas automáticamente usando Eclipse.
Un ejemplo sería ejecutar la misma prueba 10 veces seguidas e informar el resultado.
Ya tenemos una forma compleja de hacer esto, pero estoy buscando una manera simple de hacerlo para poder estar seguro de que la prueba escamosa que he estado tratando de arreglar se mantiene fija.
Una solución ideal sería un complemento / configuración / característica de Eclipse que desconozco.
Respuestas:
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:
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 laMethodRule
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 elParameterized
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.
fuente
Con IntelliJ, puede hacer esto desde la configuración de prueba. Una vez que abra esta ventana, puede elegir ejecutar la prueba la cantidad de veces que desee.
cuando ejecute la prueba, intellij ejecutará todas las pruebas que haya seleccionado para la cantidad de veces que especificó.
Ejemplo ejecutando 624 pruebas 10 veces:
fuente
He descubierto que la anotación repetida de Spring es útil para ese tipo de cosas:
Último documento (Spring Framework 4.3.11.RELEASE API):
fuente
Inspirado en los siguientes recursos:
Ejemplo
Cree y use una
@Repeat
anotación de la siguiente manera:Repeat.java
RepeatRule.java
PowerMock
Usar esta solución con
@RunWith(PowerMockRunner.class)
, requiere actualizar a Powermock 1.6.5 (que incluye un parche ).fuente
Con JUnit 5 pude resolver esto usando la anotación @RepeatedTest :
Tenga en cuenta que la
@Test
anotación no debe usarse junto con@RepeatedTest
.fuente
Algo mal con:
A diferencia del caso en el que está probando cada una de una matriz de valores, no le importa particularmente qué ejecución falló.
No es necesario hacer en la configuración o anotación lo que puede hacer en el código.
fuente
@Before
método anotado antes deitWorks()
resolver mi problema.Esto funciona mucho más fácil para mí.
fuente
public class RepeatRunner extends BlockJUnit4ClassRunner { public RepeatRunner(Class klass) throws InitializationError { super(klass); } @Override public void run(final RunNotifier notifier) { for (int i = 0; i < 10; i++) { super.run(notifier); } } }
aunque al menos en el complemento Eclipse JUnit obtienes resultados como: "10/1 pruebas aprobadas"Hay una anotación intermitente en la biblioteca tempus-fugit que funciona con JUnit 4.7
@Rule
para repetir una prueba varias veces o con@RunWith
.Por ejemplo,
Después de ejecutar la prueba (con IntermittentTestRunner en el
@RunWith
),testCounter
sería igual a 99.fuente
Construyo un módulo que permite hacer este tipo de pruebas. Pero está enfocado no solo en repetición. Pero como garantía de que algún código es seguro para subprocesos.
https://github.com/anderson-marques/concurrent-testing
Dependencia de Maven:
Ejemplo de uso:
Este es un proyecto de código abierto. Siéntase libre de mejorar.
fuente
Puede ejecutar su prueba JUnit desde un método principal y repetirla tantas veces como sea necesario:
fuente
Esta es esencialmente la respuesta que Yishai proporcionó anteriormente, reescrita en Kotlin:
fuente