[JAVA] JUnit 5: Comment écrire des cas de test dans enum

JUnit 5 fournit des annotations ** @ParameterizedTest ** qui vous permettent de transmettre des valeurs de diverses sources d'arguments aux méthodes de test en tant qu'arguments. Dans cet article, j'aimerais vous montrer comment écrire facilement de nombreux cas de test en utilisant l'une de ces sources d'arguments, ** @EnumSource **.

Préparation

Si vous utilisez ** @ParameterizedTest **, vous devez explicitement ajouter junit-jupiter-params en plus de junit-jupiter-engine comme dépendance de projet. En outre, dans cet exemple de code, AssertJ a été utilisé pour vérifier les résultats du test.

pom.xml

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.5.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.5.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.13.1</version>
    <scope>test</scope>
</dependency>

Sujet au test

Ici, nous allons tester la méthode BigInteger # gcd () du JDK. Cette méthode renvoie l'engagement maximum d'elle-même et des arguments donnés.

Rédiger un cas de test

Décrivons simplement la combinaison de deux valeurs d'entrée et la réponse correcte comme une constante de type enum.

enum GcdTestCase {
    THIS_IS_BIGGER(25, 10, 5),
    OTHER_IS_BIGGER(14, 21, 7),
    BOTH_ARE_EVEN(12, 8, 4),
    BOTH_ARE_ODD(27, 45, 9),
    BOTH_ARE_ZERO(0, 0, 0),
    BOTH_ARE_ONE(1, 1, 1),
    THIS_IS_ZERO(0, 3, 3),
    OTHER_IS_ZERO(4, 0, 4),
    THIS_IS_DIVISOR(3, 12, 3),
    OTHER_IS_DIVISOR(20, 4, 4),
    NO_COMMON_DIVISOR(7, 9, 1);

    final BigInteger a;
    final BigInteger b;
    final BigInteger expected;

    GcdTestCase(long a, long b, long expected) {
        this.a = BigInteger.valueOf(a);
        this.b = BigInteger.valueOf(b);
        this.expected = BigInteger.valueOf(expected);
    }
}

J'ai créé 11 cas de test pour le moment, mais il est relativement facile d'ajouter des cas de test plus tard. Augmentez simplement l'énumérateur.

Ecrire une méthode de test

Spécifiez l'annotation ** @ParameterizedTest ** pour la méthode de test, mais spécifiez en même temps le type d'énumération créé ci-dessus à l'aide de l'annotation ** @EnumSource **.

@ParameterizedTest
@EnumSource(GcdTestCase.class)
public void gcdShouldReturnGreatestCommonDivisorAsExpected(GcdTestCase test) {
    BigInteger actual = test.a.gcd(test.b);
    assertThat(actual).isEqualTo(test.expected);
}

Lancer le test

Si vous exécutez le test que vous avez créé avec mvn test, bien sûr, tous les tests réussiront.

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.example.junit5.tips.BigIntegerTest
[INFO] Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.156 s - in org.example.junit5.tips.BigIntegerTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 11, Failures: 0, Errors: 0, Skipped: 0

Résumé

Cette fois, j'ai présenté comment écrire facilement de nombreux cas de test en utilisant ** @EnumSource ** de JUnit 5. L'exemple de code est publié sur GitHub. La licence est The Unlicense.

Recommended Posts

JUnit 5: Comment écrire des cas de test dans enum
Comment filtrer JUnit Test dans Gradle
Comment écrire Junit 5 organisé
Comment écrire dynamiquement des cas de test itératifs à l'aide de test / unit (Test :: Unit)
Comment exécuter JUnit dans Eclipse
Comment fixer la date système dans JUnit
Comment tester l'étendue privée avec JUnit
[SpringBoot] Comment écrire un test de contrôleur
[Java] Comment tester s'il est nul dans JUnit
[Java FX] Comment écrire des autorisations Eclipse dans build.gradle
Comment écrire des rails
Comment tester les interruptions pendant Thread.sleep avec JUnit
Comment tester une méthode privée qui prend un tableau ou un argument de longueur variable dans JUnit
Comment écrire docker-compose
Comment écrire Mockito
Comment écrire du code de test avec la certification de base
Comment écrire un fichier de migration
Comment écrire Java String # getBytes dans Kotlin?
Notes sur la façon de rédiger des commentaires en anglais
Comment écrire un test unitaire pour Spring Boot 2
Comment écrire une recherche de comparaison de dates dans Rails
Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium
Comment écrire un mod de base dans Minecraft Forge 1.15.2
Comment écrire du bon code
[Rails] Comment utiliser enum
Comment utiliser JUnit (débutant)
[Rails] Comment utiliser enum
Comment rédiger un commentaire java
Reportez-vous à enum dans Thymeleaf
[Refactoring] Comment écrire le routage
Tester les méthodes privées dans JUnit
Tester les méthodes privées dans JUnit
Comment écrire des graines de Rails
Comment écrire le routage Rails
[Création] Comment utiliser JUnit
Comment utiliser le type d'énumération Java (Enum) dans Mapper XML de MyBatis
[Rails 5] lien japanMap Comment écrire des paramètres dans le fichier js.erb
[Rails] Comment écrire user_id (clé externe) dans un paramètre fort
Comment utiliser Lombok au printemps
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment itérer indéfiniment en Ruby
Étudier Java # 6 (Comment écrire des blocs)
Comment exécuter Ant dans Gradle
Écrire du code de test avec Spring Boot
Comment maîtriser la programmation en 3 mois
Comment apprendre JAVA en 7 jours
Comment obtenir des paramètres dans Spark