目次
説明
@ParameterizedTestでnullを扱うには、値を空欄にする必要があります。
「null」という値を与えても文字列として扱われてしまうので注意が必要です。
コード
nullをテストする
以下の例では@CsvSourceで値を与えています。
- 1行目のデータでは「null」を与えているように見えますが、実際には「null」という文字列を与えていることにります。
そのため、assertではnullでないと判定されます。 - 2行目では値が空欄になっており、これでnullを与えたことになります。
1 2 3 4 5 6 7 8 9 |
@ParameterizedTest @CsvSource({ "false, 1, null", "true, , ", }) public void sample(Boolean expected, Integer value, String str) { assertEquals(expected, Objects.isNull(value)); assertEquals(expected, Objects.isNull(str)); } |
引数はオブジェクト型にすること
nullは参照型にしか与えられない値なので、テストメソッドの引数をプリミティブ型にすると例外がthrowされてテストに失敗するので注意して下さい。
(以下のテストデータの2行目)
1 2 3 4 5 6 7 8 |
@ParameterizedTest @CsvSource({ "false, 1", "true, ", }) public void sample2(Boolean expected, int value) { assertEquals(expected, Objects.isNull(value)); } |
[例外]
org.junit.jupiter.api.extension.ParameterResolutionException: Error converting parameter at index 1: Cannot convert null to primitive value of type int
まとめ
- nullは空欄を値として与えること。
- テストメソッドの引数はオブジェクト型にすること。
参考情報
- JUnit 5 ユーザーガイド
基本的な情報源はこちらになります。
コメント