unit-test-parameterized は何をしますか?
JUnit 5 のパラメータ化テストパターンを提供し、@ParameterizedTest、@ValueSource、@CsvSource、@MethodSource を使用したデータ駆動型の単体テストを生成します。同じロジックを複数の入力値で実行するテストを作成します。データ駆動型の Java テスト、単一メソッドから複数のテストケース、境界値分析を作成する際に使用します。
概要
このスキルは、JUnit 5 のパラメータ化テスト機能を利用して、同じテストロジックを複数の異なる入力値で実行する方法を提供します。手動で個別のテストメソッドを書く代わりに、単一のパラメータ化されたテストメソッドを定義し、そこに様々な入力値を供給することで、コードの重複を排除し、テストの保守性を向上させます。
主な機能
- @ParameterizedTest: テストメソッドをパラメータ化するための基本的なアノテーション
- @ValueSource: リテラル値の配列をテスト引数として提供
- @CsvSource: CSV 形式でインラインの引数リストを提供
- @MethodSource: 外部のファクトリメソッドからテスト引数を提供
使用例
@ValueSource の使用
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;
class NumberUtilsTest {
@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4, 5})
void testPositiveNumbers(int number) {
assertTrue(number > 0);
}
}
@CsvSource の使用
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CalculatorTest {
@ParameterizedTest
@CsvSource({
"1, 1, 2",
"2, 3, 5",
"-1, 1, 0"
})
void testAddition(int a, int b, int expected) {
assertEquals(expected, a + b);
}
}
@MethodSource の使用
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
class StringUtilsTest {
@ParameterizedTest
@MethodSource("provideStringsForIsBlank")
void testIsBlank(String input, boolean expected) {
assertEquals(expected, input == null || input.trim().isEmpty());
}
static Stream<Arguments> provideStringsForIsBlank() {
return Stream.of(
Arguments.of(null, true),
Arguments.of("", true),
Arguments.of(" ", true),
Arguments.of("not blank", false)
);
}
}
境界値分析の例
@ParameterizedTest
@ValueSource(ints = {Integer.MIN_VALUE, -1, 0, 1, Integer.MAX_VALUE})
void testBoundaryValues(int value) {
// 境界値に対するテストロジック
}
注意点
- パラメータ化テストは、テストの可読性を損なわないように適切に使用してください。
- 複雑なデータ構造をテストする場合は、@MethodSource を使用するとよいでしょう。
- テストデータは可能な限りわかりやすい名前のファクトリメソッドで提供することを推奨します。