コード:-
try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
Assert文が失敗した場合、catchブロックでエラーをキャプチャしたいと思います。私は上記のコードを試していますが、それは起きていません。
アサーションエラーは、Java例外のcatchブロックでキャッチされますか?
あなたはほとんど自分の質問に答えました。 catchブロックは、AssertionError
である(または、より具体的には_Java.lang.Error
_を拡張する)ため、Assert
が失敗した場合にスローするError
をキャッチしません。 詳細については、docs を参照してください。 catchブロックは、 _Java.lang.Exception
_ を拡張するThrowable
オブジェクトのみをキャッチします
あなたは本当にそれをキャッチしたい場合-あなたが使用する必要があります
_catch (AssertionError e) {
...
_
ただし、 others have 言及 、これはアサーションを使用する非常に珍しい方法です-通常はパスする必要があり、失敗した場合、プログラムの実行を続行することは非常に珍しいです。これが、失敗がError
ではなくException
をスローする理由です。 this question でError
をキャッチする(しない)ことの詳細を読むことができます。
ただテストしたくないだけですか?if ( variableName == "1")
?
[〜#〜] nb [〜#〜]マッチャーなどの単体テストヘルパーコードをテストしている場合は、 AssertionError
。
さて、テストの作成にJUnitを使用していると思います。その場合、Assert.assertEquals()
をキャッチしないでください。通常のテスト実行に合格する必要があるためです。例外がスローされた場合、コードが本来どおりに実行されていないことを意味します。
その方法でエラーをキャッチするには、次のようなものが必要です。
if (num == 1 || num == 2) {
throw new Exception();
}
独自の例外クラスを作成して、必要なメッセージを渡すことができます。
Exception
とError
の両方のインスタンスをキャッチしたい場合:
...
catch (Throwable t)
{
...
}
Exception
とError
の両方がThrowable
を拡張するため。