以下の内容はhttps://anton0825.hatenablog.com/entry/2022/07/25/141631より取得しました。


JUnitのassertThrowsで例外がthrowされることをテストしたらエラーメッセージがログに出る

以下のように、assertThrowsでExceptionがthrowされることをテストする場合。

assertThrows(Exception.class, () -> myObj.method());

想定通りの例外がthrowされた場合でも以下のようなエラーメッセージがログに出るので邪魔くさい。

Exception in thread "pool-14-thread-1" java.lang.RuntimeException: ...

原因は、javaでlambdaを実行すると自動的に別スレッドが起動され、そこでlambda関数が実行され、別スレッドで実行中にcatchされない例外があった場合自動的にエラーメッセージをログに出してしまうため。メインスレッドの方に例外を伝播してくれれば別スレッドでcatchされない場合でもエラーメッセージ出さなくていいと思うが。。

以下のように、一時的にcatchされない例外があってもエラーログを出さないようにして対応した。

Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {});
assertThrows(Exception.class, () -> myObj.method());
Thread.setDefaultUncaughtExceptionHandler(defaultHandler);

参考:

maku77.github.io




以上の内容はhttps://anton0825.hatenablog.com/entry/2022/07/25/141631より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14