テストを実行したとき、例外が発生するかを確認する方法を紹介します。
Annotationを使った方法
Annotationを利用して、Exceptionが発生していることをテストすることができます。
@Test(expected = Exception)
のようにコードを実行したときに期待されるExceptionを明示ください。
次のコードでは、NullPointerExceptionが発生した場合、テストはパスし、発生しない場合に失敗します。
@Test(expected = NullPointerException.class)
public void testExceptionThrown() {
String str = null;
str.contains("a");
}
ExpectedException Ruleを使用した方法
ExpectedExceptionというRuleを利用して、Exceptionが発生されるかをテストすることができます。
下のテストで、NullPointerExceptionが発生した場合、テストはパスします。 expect()
メソッドに発生すると予想されるExceptionを明示します。
@Rule
public ExpectedException exceptionRule = ExpectedException.none();
@Test
public void testExceptionThrown() {
exceptionRule.expect(NullPointerException.class);
String str = null;
str.contains("a");
}
例外のメッセージ内容を確認する
上記のコードでは、NullPointerExceptionが発生した場合、テストはパスするが、私は期待したコードでExceptionが発生した保証することは困難もあります。 このような場合には、Exceptionのメッセージの内容まで確認すると、より正確にテストすることができます。
次のコードでは、NullPointerExceptionのメッセージが "Null object is invoked"
場合にのみ、テストがパスします。
@Rule
public ExpectedException exceptionRule = ExpectedException.none();
@Test
public void testExceptionThrown2() {
exceptionRule.expect(NullPointerException.class);
exceptionRule.expectMessage("Null object is invoked");
throw new NullPointerException("Null object is invoked");
}
もし下記のように、他のメッセージのNullPointerExceptionが発生した場合、テストは失敗します。
@Test
public void testExceptionThrown2() {
exceptionRule.expect(NullPointerException.class);
exceptionRule.expectMessage("Null object is invoked");
throw new NullPointerException("Null object");
}
失敗メッセージは、次のようになります。
java.lang.AssertionError:
Expected: (an instance of java.lang.NullPointerException and exception with message a string containing "Null object is invoked")
but: exception with message a string containing "Null object is invoked" message was "Null object"
try-catchを使った方法
以下のように、try-catchを使用して、例外が発生するかをテストすることができます。例外が発生すると、catchに移動するので、 fail()
が呼び出されず、テストはパスします。
もしExceptionが発生していなかった場合、 fail()
が呼び出され、テストは失敗します。
@Test
public void testExceptionThrown3() {
try {
String str = null;
str.contains("a");
fail();
} catch (NullPointerException e) {
// pass
}
}
Related Posts
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法