Detener/Cancelar la ejecución de la prueba JUnit 5 (iniciada programáticamente)
Tengo algunas pruebas de JUnit 5, que se ejecutan y se inician dentro de un contenedor OSGi.
El código para iniciar la ejecución de la prueba se ve algo así:
LauncherConfig launcherConfig = LauncherConfig.builder().addTestEngines( new JupiterTestEngine() ).build();
Launcher launcher = LauncherFactory.create( launcherConfig );
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors( selectClass( testName ) )
.build();
TestPlan testPlan = launcher.discover( request );
launcher.execute( request );
Dado que algunas de estas pruebas requieren pasos manuales con hardware físico, las pruebas no se ejecutan en un entorno de integración continua (CI) y están destinadas a ser ejecutadas manualmente por un probador. Por lo tanto, las pruebas pueden tardar bastante tiempo (especialmente si el probador no realiza los pasos manuales requeridos).
Pregunta: ¿Cómo puedo detener la ejecución de una prueba en curso?
Antecedentes: Me gustaría asegurarme de que solo se ejecute una prueba a la vez para evitar interferencias entre las pruebas. Por otro lado, no quiero que una prueba “incompleta” bloquee la ejecución de la prueba para siempre.
davy.ai
Para detener la ejecución de una prueba en curso, se puede utilizar el método
Launcher#registerTestExecutionListeners
para registrar unTestExecutionListener
personalizado que escuche las interrupciones del teclado. Una vez que el oyente esté registrado, la ejecución de la prueba se puede detener por parte del probador utilizando una interrupción del teclado (generalmente Ctrl-C).Aquí tienes un ejemplo de implementación de dicho oyente:
Para utilizar este oyente, puedes crear una instancia de él, registrarlo con la instancia de
Launcher
utilizandoLauncher#registerTestExecutionListeners
y revisar periódicamente si se ha establecido la banderastopExecution
. Si es así, puedes llamar aLauncher#stop()
para detener la ejecución de la prueba actual. Aquí tienes un ejemplo: