Cómo envolver todas las pruebas de junit?
¿Cómo puedo crear una extensión/regla/interceptor de JUnit5 que envuelva automáticamente cada método @Test
?
Ejemplo: imaginemos que queremos medir el tiempo de ejecución:
class TimeExtension {
runTest() {
StopWatch w = new StopWatch();
w.start();
// realmente ejecutar la prueba original
test.run();
w.stop();
}
}
¿Cómo se podría aplicar esto a cualquier clase de prueba?
davy.ai
Para crear una extensión
junit5
que envuelva automáticamente cada método@Test
, sigue los siguientes pasos:BeforeTestExecutionCallback
yAfterTestExecutionCallback
. Esta clase actuará como la extensión.Implementa los métodos
beforeTestExecution
yafterTestExecution
que envolverán el método@Test
.En el método
beforeTestExecution
, instancia y comienza el temporizador.En el método
afterTestExecution
, detén el temporizador e imprime el tiempo de ejecución.Ejemplo:
Para aplicar esta extensión a cualquier clase de prueba, agrega la anotación
@ExtendWith(TimeExtension.class)
a la clase de prueba.Ejemplo:
Esto envolverá automáticamente el método
@Test
con la extensiónTimeExtension
e imprimirá el tiempo de ejecución.