5.1 @ParameterizedTest アノテーション
場合によっては、異なる値、異なる入力パラメータ、異なるユーザー名など、異なるパラメータを使用してテストを複数回呼び出したい場合があります。JUnit はユーザーの作業を容易にすることを目的としているため、この場合にはパラメーター化されたテストのようなものが備わっています。
パラメーター化されたテストを使用するには、依存関係をもう 1 つ追加する必要がありますpom.xml
。
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
次に、例を考えてみましょう。
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
//test code
}
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
//test code
}
各テスト メソッドは 3 回呼び出され、呼び出されるたびに別のパラメーターが渡されます。値は別のアノテーション@ValueSourceを使用して設定されます。しかし、それについてはさらに説明する必要があります。
5.2 @ValueSource アノテーション
@ValueSourceアノテーションは、プリミティブとリテラルを操作するのに最適です。パラメータ値をカンマで区切ってリストするだけで、値ごとにテストが 1 回呼び出されます。
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
//test code
}
ただし、マイナス点もあります。このアノテーションは null をサポートしていないため、特別なサポート ( @NullSource ) を使用する必要があります。次のようになります。
@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
assertTrue(argument == null);
}
5.3 @EnumSource アノテーション
特定の Enum のすべての値をメソッドに渡す特別なアノテーション@EnumSourceもあります。そのアプリケーションは次のようになります。
enum Direction {
EAST, WEST, NORTH, SOUTH
}
@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
assertNotNull(d);
}
5.4 @MethodSource アノテーション
しかし、オブジェクトをパラメータとして渡すにはどうすればよいでしょうか? 特に複雑な構築アルゴリズムを使用している場合はそうです。これを行うには、そのような値のリスト (ストリーム) を返す特別なヘルパー メソッドを指定するだけです。
例:
@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
assertNotNull(argument);
}
static Stream<String> argsProviderFactory() {
return Stream.of("one", "two", "three");
}
複数の引数を使用したパラメータ化されたテスト
もちろん、メソッドに複数のパラメーターを渡したい場合はどうすればよいか、すでに考えているでしょう。これには非常にクールな@CSVSourceアノテーションがあります。これにより、メソッドパラメータの値をカンマで区切ってリストすることができます。
例:
@ParameterizedTest
@CsvSource({
"alex, 30, Programmer, Working",
"brian, 35, Tester, Working",
"charles, 40, manager, kicks"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
//method code
}
GO TO FULL VERSION