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 **.
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>
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.
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.
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);
}
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
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