JUnitにはパラメーター化テストを実施したい場合に便利な機能があります。
以下のように@ParameterizedTest
と@ValueSource
を付けてパラメーターを指定することで、一つのメソッドで指定したパラメーターをテストすることができます。
ValueSource
@ParameterizedTest
@ValueSource(strings = {"0311111111", "08011111111"})
public void phoneNumber_is_10_11_digits(String phoneNumber) {
assertTrue(isPhoneNumber(phoneNumber));
}
しかし、このやり方ではパラメーターの値しか指定されていないため、パッと見て何をテストしているのかが判断できません。
パラメーターに説明などを付け加えて分かりやすいテストを書いていきたいです。
そこで、以下のように@ValueSource
の代わりに@MethodSource
を付けて、パラメーターに名前を指定したメソッドのメソッド名を指定することで、テストコードを見てどのようなパラメーターをテストしているかがわかりやすくなります。
MethodSource
@ParameterizedTest
@MethodSource("phoneNumberProvider")
public void phoneNumber_is_10_11_digits(String phoneNumber) {
assertTrue(isPhoneNumber(phoneNumber));
}
static Stream<Arguments> phoneNumberProvider() {
return Stream.of(
arguments(Named.of("10桁の固定電話番号", "0311111111")),
arguments(Named.of("11桁の携帯電話番号", "08011111111"))
);
}
テスト結果もわかりやすくなりました。