JUnit 5 enthält ** @ParameterizedTest ** -Anmerkungen, mit denen Sie Werte aus verschiedenen Argumentquellen als Argumente an Testmethoden übergeben können. In diesem Artikel möchte ich Ihnen zeigen, wie Sie mit einer dieser Argumentquellen, ** @EnumSource **, einfach viele Testfälle schreiben können.
Wenn Sie ** @ParameterizedTest ** verwenden, müssen Sie zusätzlich zu "junit-jupiter-engine" explizit "junit-jupiter-engine" als Projektabhängigkeit hinzufügen. In diesem Beispielcode wurde auch AssertJ verwendet, um die Testergebnisse zu überprüfen.
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>
Hier werden wir die BigInteger # gcd () -Methode des JDK testen. Diese Methode gibt die maximale Verpflichtung von sich selbst und den angegebenen Argumenten zurück.
Beschreiben wir einfach die Kombination zweier Eingabewerte und die richtige Antwort als Aufzählungstypkonstante.
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);
}
}
Ich habe vorerst 11 Testfälle erstellt, aber es ist relativ einfach, später Testfälle hinzuzufügen. Erhöhen Sie einfach den Enumerator.
Geben Sie die Annotation ** @ParameterizedTest ** für die Testmethode an, geben Sie jedoch gleichzeitig den oben erstellten Aufzählungstyp mit der Annotation ** @EnumSource ** an.
@ParameterizedTest
@EnumSource(GcdTestCase.class)
public void gcdShouldReturnGreatestCommonDivisorAsExpected(GcdTestCase test) {
BigInteger actual = test.a.gcd(test.b);
assertThat(actual).isEqualTo(test.expected);
}
Wenn Sie den Test ausführen, den Sie mit "mvn test" erstellt haben, sind natürlich alle Tests erfolgreich.
[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
Dieses Mal habe ich vorgestellt, wie man mit ** @EnumSource ** von JUnit 5 einfach viele Testfälle schreibt. Der Beispielcode wird auf GitHub veröffentlicht. Die Lizenz lautet The Unlicense.
Recommended Posts