es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ejecutar un programa de prueba JUnit de forma programática.

Estoy escribiendo una herramienta personalizada que ejecuta un conjunto de clases de prueba de forma programática utilizando JUnit 5.

Al ejecutar estas pruebas, ¿cómo se imprime la salida real en la consola o en un archivo de registro?

Tengo aproximadamente el siguiente código:

LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                                                                  .selectors(selectPackage(basePackage))
                                                                  .filters(includeClassNamePatterns(classNamePatterns))
                                                                  .build();

SummaryGeneratingListener listener = new SummaryGeneratingListener();

Launcher launcher = LauncherFactory.create();
launcher.registerTestExecutionListeners(listener);

TestPlan testPlan = launcher.discover(request);

// launcher.execute(request);
launcher.execute(testPlan);

TestExecutionSummary summary = listener.getSummary();
summary.printTo(new PrintWriter(System.out));
summary.printFailuresTo(new PrintWriter(System.out));

Lo he intentado solo con la solicitud y un plan de pruebas. No estoy muy seguro de cuál es la diferencia entre los dos, pero el resultado parece ser el mismo:

La ejecución de las pruebas finalizó después de 50 ms
[ 3 contenedores encontrados ]
[ 0 contenedores omitidos ]
[ 3 contenedores iniciados ]
[ 0 contenedores abortados ]
[ 3 contenedores exitosos ]
[ 0 contenedores fallidos ]
[ 2 pruebas encontradas ]
[ 0 pruebas omitidas ]
[ 2 pruebas iniciadas ]
[ 0 pruebas abortadas ]
[ 2 pruebas exitosas ]
[ 0 pruebas fallidas ]

…Lo cual es genial — mis dos pruebas se están recogiendo y ejecutando de forma programática (he cambiado específicamente sus sufijos de ‘Test’ a ‘Probe’ y he especificado manualmente que se debe usar el patrón ‘.*Probe’ y definitivamente las está ejecutando ya que no tengo otras pruebas.

Sin embargo, no estoy obteniendo ninguna salida. Supongo que me falta algún listener o no he configurado algún parámetro o algo así… ¿Podrías asesorarme? ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para imprimir la salida real en la consola o en un archivo de registro al ejecutar JUnit 5 programáticamente, es necesario agregar TestExecutionListeners adicionales al Launcher. Estos oyentes interceptarán los eventos de ejecución de las pruebas y te permitirán registrar o imprimir información según sea necesario.

    Por ejemplo, para imprimir la salida de cada prueba en la consola, puedes agregar un TestExecutionListener que registre la secuencia stdout/stderr de cada prueba. Aquí tienes un ejemplo:

    LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
        .selectors(selectPackage(basePackage))
        .filters(includeClassNamePatterns(classNamePatterns))
        .build();
    
    SummaryGeneratingListener listener = new SummaryGeneratingListener();
    
    Launcher launcher = LauncherFactory.create();
    launcher.registerTestExecutionListeners(listener,
        new PrintTestExecutionListener(new PrintWriter(System.out)));
    
    TestPlan testPlan = launcher.discover(request);
    launcher.execute(testPlan);
    
    TestExecutionSummary summary = listener.getSummary();
    summary.printTo(new PrintWriter(System.out));
    summary.printFailuresTo(new PrintWriter(System.out));
    

    En este ejemplo, hemos agregado un nuevo TestExecutionListener llamado PrintTestExecutionListener al Launcher. Este listener intercepta la secuencia stdout/stderr de cada prueba y la imprime en un PrintWriter, que en este caso está configurado como System.out.

    Ten en cuenta que aún es necesario registrar SummaryGeneratingListener para obtener la información del resumen después de ejecutar las pruebas.

    También puedes escribir tu propio TestExecutionListener personalizado para registrar o imprimir otra información según sea necesario. La documentación de JUnit 5 tiene más información sobre cómo hacer esto.

Comments are closed.