¿Cómo puedo ejecutar método de limpieza sólo después de pruebas marcadas?

arghtype:

Estoy escribiendo JUnit 5 pruebas para mi proyecto Java.

Tengo algunos métodos de ensayo que requieren mucho tiempo la limpieza (después de cada uno de ellos). Idealmente, me gustaría marcarlos con alguna anotación y correr método de limpieza sólo para ellos.

Esto es lo que he intentado:

class MyTest {

    @AfterEach
    @Tag("needs-cleanup")
    void cleanup() {
        //do some complex stuff
    }

    @Test
    void test1() {
         //do test1
    }

    @Test
    @Tag("needs-cleanup")
    void test2() {
         //do test2
    }
}

Quiero cleanupmétodo para ejecutarse sólo después test2. Pero en realidad se ejecuta después de que ambas pruebas.

¿Es posible lograrlo a través de una combinación de JUnit 5 anotaciones? No quiero dividir mi clase de prueba en varias clases o llamar cleanupdirectamente desde los métodos de prueba.

Mohammadreza Alagheband:

A partir de la documentación:

TestInfo: si un parámetro del método es de tipo TestInfo, la TestInfoParameterResolver suministrará una instancia de TestInfo correspondiente a la corriente de prueba como el valor para el parámetro. El TestInfo continuación, se puede utilizar para recuperar información acerca de la prueba actual como el nombre de la prueba de la pantalla, la clase de prueba, el método de ensayo, o etiquetas asociadas. El nombre de visualización es o bien un nombre técnico, como por ejemplo el nombre del método de la clase de prueba o ensayo, o un nombre personalizado configurado a través de @DisplayName.

TestInfo actúa como un reemplazo directo para la regla TestName de JUnit 4.

En cuanto a la descripción anterior, puede utilizar la clase TestInfo que le da la información de la clase que la limpieza se supone que debe ser ejecutado, entonces usted necesita comprobar el estado y la posibilidad de que dichos desea comprobando sus etiquetas:

@AfterEach 
void afterEach(TestInfo info) {
    if(!info.getTags().contains("cleanItUp")) return; // preconditioning only to needs clean up
        //// Clean up logic Here
}


@Test
@Tag("cleanItUp")
void myTest() {

}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=225852&siteId=1
Recomendado
Clasificación