7.1 Annotation @Suite

Et quelques annotations plus fréquemment utilisées. Même si vous ne les utilisez pas, vous verrez certainement des tests avec eux. Par conséquent, il est nécessaire de comprendre au moins en termes généraux ce qui y est écrit.

Les tests peuvent être combinés en groupes. Il y a une annotation spéciale pour cela @Suite. Exemple:

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

Dans ce cas, l'annotation @Suite est associée à d'autres annotations.

  • SuiteDisplayName– définit le nom du groupe de test dans le journal ;
  • SelectPackages- définit la liste des packages où rechercher les classes de test ;
  • IncludeClassNamePatterns– définit le modèle des noms de classe de test.

Pourquoi de telles difficultés ? Eh bien imaginez que tous les tests du projet soient exécutés, disons, 50 heures. Et les exécuter après chaque commit coûte très cher. Dans un tel cas, il est utile de créer des scripts de test séparés et de configurer les tests de manière beaucoup plus flexible.

7.2 Annotation @Commande

Une autre annotation courante est @TestMethodOrder. Il vous permet de spécifier l'ordre dans lequel les méthodes de test sont appelées dans la classe de test. Cela peut être très utile lorsque vous savez que les appels de méthode s'affectent les uns les autres, mais dans un certain ordre, tout devrait fonctionner comme il se doit. Utilisé assez souvent.

Tout d'abord, vous pouvez définir les méthodes à appeler par ordre alphabétique :

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

}

Deuxièmement, chaque méthode peut avoir une annotation spéciale avec son numéro ordinal.

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {

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

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

Ou même créer une classe séparée qui précisera l'ordre dans lequel les tests sont appelés :

@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 Annotation @DisplayName

Enfin, chaque test peut recevoir un nom. Cela peut être pratique s'il y a beaucoup de tests et que vous créez des scénarios spéciaux (sous-ensembles) de tests. Il y a une annotation spéciale pour cela @DisplayName.

Exemple:

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

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

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

Comme dans le cas de la définition de l'ordre des tests, vous pouvez créer ici une méthode spéciale qui générera les noms des tests et des méthodes de test. Exemple:

@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();
        }
 }
}

Regarde comme c'est facile :)