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.

Plugin Maven Surefire + pruebas dinámicas JUnit5 – ¿cómo anular el nombre de las pruebas?

Supongamos que tenemos un test dinámico JUnit5 como este:

public class ProbaTest {
    @TestFactory
    public Iterable<dynamicnode> tests() {
        return Collections.singleton(
            DynamicTest.dynamicTest("aaa", () -> {
                throw new AssertionError("FAIL, as planned");
            })
        );
    }
}

Cuando se ejecuta con el plugin Surefire Maven, falla de la siguiente manera:

[INFO] --- maven-surefire-plugin: 2.22.2: test (prueba predeterminada) @ proba-retrolambda ---
[INFO]
[INFO] -------------------------------------------------- -----
[INFO] PRUEBAS
[INFO] -------------------------------------------------- -----
[INFO] Ejecutando com.proba.ProbaTest
[ERROR] Ejecución de pruebas: 1, fallos: 1, errores: 0, omitidos: 0, tiempo transcurrido: 0.025 s <<< ¡FALLA! - en com.proba.ProbaTest
[ERROR] tests [1] Tiempo transcurrido: 0.007 s <<< ¡FALLA!
java.lang.AssertionError: FAIL, as planned
    en com.proba.ProbaTest.lambda $tests $ 0 (ProbaTest.java:  14) & nbsp; & nbsp; & nbsp;

[INFO]
[INFO] Resultados:
[INFO]
[ERROR] Fallos:
[ERROR] ProbaTest.lambda $tests $ 0:14 FAIL, as planned
[INFO]
[ERROR] Ejecutando pruebas: 1, fallos: 1, errores: 0, omitidos: 0

Algo notable sobre la salida es el nombre dinámico, dado por JUnit5 – “tests [1]”. No utiliza el nombre de visualización “aaa” dado por el factory del test, y por lo que vi, hay razones para esto.

Sin embargo, me pregunto si hay alguna forma de anular explícitamente el comportamiento de nomenclatura. ¿Hay alguna forma de proporcionar nombres explícitos para casos de prueba dinámicos de JUnit?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de proporcionar nombres explícitos para los casos de prueba dinámicos de JUnit. Puedes usar el método displayName de DynamicTest. Aquí tienes un ejemplo:

    public class ProbaTest {
        @TestFactory
        public Iterable<dynamictest> tests() {
            return Collections.singleton(
                    DynamicTest.dynamicTest("aaa", () -> {
                        throw new AssertionError("ERROR, como estaba previsto");
                    }).displayName("Mi caso de prueba")
            );
        }
    }
    

    En este ejemplo, hemos agregado el método displayName a la instancia DynamicTest y hemos proporcionado el nombre deseado como argumento. Ahora, cuando se ejecute este caso de prueba, el nombre del display será “Mi caso de prueba” en lugar del nombre dinámico predeterminado.

    Esto puede ser útil cuando quieres proporcionar nombres más descriptivos y legibles para tus casos de prueba dinámicos.

Comments are closed.