7.1 Anotación @Suite

Y algunas anotaciones de uso más frecuente. Incluso si no los usa, definitivamente verá pruebas con ellos. Por lo tanto, es necesario comprender al menos en términos generales lo que está escrito allí.

Las pruebas se pueden combinar en grupos. Hay una anotación especial para esto @Suite. Ejemplo:

@Suite
@SuiteDisplayName("JUnit Platform Suite Demo")
@SelectPackages("com.codegym.test")
@IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}

En este caso, la anotación @Suite se combina con otras anotaciones.

  • SuiteDisplayName– establece el nombre del grupo de prueba en el registro;
  • SelectPackages- establece la lista de paquetes donde buscar clases de prueba;
  • IncludeClassNamePatterns– establece el patrón de nombres de clase de prueba.

¿Por qué tales dificultades? Pues imagina que se ejecutan todas las pruebas del proyecto, digamos, 50 horas. Y ejecutarlos después de cada confirmación es muy costoso. En tal caso, es útil crear algunos scripts de prueba separados y configurar las pruebas de una manera mucho más flexible.

7.2 @Anotación de pedido

Otra anotación común es @TestMethodOrder. Le permite especificar el orden en que se llaman los métodos de prueba en la clase de prueba. Puede ser muy útil cuando sabe que las llamadas a métodos se afectan entre sí, pero en cierto orden, todo debería funcionar como debería. Usado bastante a menudo.

Primero, puede configurar los métodos que se llamarán en orden alfabético :

@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {

}

En segundo lugar, cada método puede tener una anotación especial con su número ordinal.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

    @Test
    @Order(1)
    public void firstTest() {
    }

    @Test
    @Order(2)
    public void secondTest() {
    }
}

O incluso cree una clase separada que especifique el orden en que se llaman las pruebas:

@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {

}

//sort method names alphabetically, but ignoring case
public class CustomOrder implements MethodOrderer {
    public void orderMethods(MethodOrdererContext context) {
        context.getMethodDescriptors().sort(
        (MethodDescriptor m1, MethodDescriptor m2)->
           m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
    }
}

7.3 Anotación @DisplayName

Finalmente, a cada prueba se le puede dar un nombre. Puede ser conveniente si hay muchas pruebas y crea escenarios especiales (subconjuntos) de pruebas. Hay una anotación especial para esto @DisplayName.

Ejemplo:

@DisplayName("Friendly name for the test")
public class DisplayNameCustomTest {

    @Test
    @DisplayName("Input Validation")
    void inputData() {
    }

    @DisplayName("Checking critical situations")
    @Test
    void criticalCases() {
    }
}

Como en el caso de establecer el orden de las pruebas, aquí puede crear un método especial que generará los nombres de las pruebas y los métodos de prueba. Ejemplo:

@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {

    @Test
    void camelCaseName() {
    }

    static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
        @Override
        public String generateDisplayNameForClass(Class testClass) {
            return super.generateDisplayNameForClass(testClass).toUpperCase();
        }
 }
}

Mira lo fácil que es :)