JUnit 5 @Test Annotation

JUnit 5 @Test Annotation

1. Vue d'ensemble

Dans cet article, nous allons passer rapidement en revue l'annotation@Testde JUnit. Cette annotation fournit un outil puissant pour effectuer des tests unitaires et des tests de régression.

2. Configuration Maven

Pour utiliser leslatest version of JUnit 5, nous devons ajouter la dépendance Maven suivante:


    org.junit.jupiter
    junit-jupiter-engine
    5.1.0
    test

Nous utilisons la portée detestcar nous ne voulons pas que Maven inclue cette dépendance dans notre version finale.

Étant donné que le plugin infaillible ne prend pas encore entièrement en charge JUnit 5 de manière native,we’ll also need to add a provider, qui indique à Maven où trouver nos tests:


    maven-surefire-plugin
    2.19.1
    
        
            org.junit.platform
            junit-platform-surefire-provider
            1.0.2
        
    

Dans notre configuration, nous utiliserons surefire 2.19.1 car,at the time of writing, version 2.20.x is not compatible with the junit-platform-surefire-provider.

3. Méthode sous test

Tout d'abord, construisons une méthode simple que nous utiliserons dans nos scénarios de test pour présenter les capacités de l'annotation@Test:

public boolean isNumberEven(Integer number) {
    return number % 2 == 0;
}

Cette méthode doit renvoyertrue si l'argument passé est un nombre pair etfalse dans le cas contraire. Voyons maintenant si cela fonctionne comme prévu.

4. Tester la méthode

Pour notre exemple, nous voulons vérifier spécifiquement deux scénarios:

  • lorsqu'on lui donne un nombre pair, la méthode doit renvoyertrue

  • quand on lui donne un nombre impair, la méthode doit retournerfalse

Cela signifie que le code d'implémentation appellera notre méthodeisNumberEven avec différents paramètres et vérifiera que le résultat est ce que nous attendons.

In order for the tests to be recognized as such, we’ll add the @Test annotation. Nous pouvons en avoir autant que nous le voulons dans une classe, mais c'est une bonne pratique de ne rassembler que les éléments connexes. Notez également quea test must not be private, nor may it return a value - sinon, il sera simplement ignoré.

Compte tenu de ces considérations, écrivons nos méthodes de test:

@Test
void givenEvenNumber_whenCheckingIsNumberEven_thenTrue() {
    boolean result = bean.isNumberEven(8);

    Assertions.assertTrue(result);
}

@Test
void givenOddNumber_whenCheckingIsNumberEven_thenFalse() {
    boolean result = bean.isNumberEven(3);

    Assertions.assertFalse(result);
}

Si nous exécutons maintenant une compilation Maven,the surefire plugin will go through all the annotated methods in the classes placed under src/test/java and execute them, provoquant l'échec de la construction si des échecs de test se produisent.

Si vous venez de JUnit 4,be aware that in this version the annotation doesn’t accept any parameters. Pour vérifier un timeout ou une exception levée, nous utiliserions des assertions à la place:

@Test
void givenLowerThanTenNumber_whenCheckingIsNumberEven_thenResultUnderTenMillis() {
    Assertions.assertTimeout(Duration.ofMillis(10), () -> bean.isNumberEven(3));
}

@Test
void givenNull_whenCheckingIsNumberEven_thenNullPointerException() {
    Assertions.assertThrows(NullPointerException.class, () -> bean.isNumberEven(null));
}

5. Conclusion

Dans ce rapide tutoriel, nous avons montré comment implémenter et exécuter un test JUnit simple avec l'annotation@Test.

Plus d'informations sur le framework JUnit peuvent être trouvées dansthis post qui fournit une introduction générale.

Tout le code utilisé dans les exemples est disponible dans lesGitHub project.