以下のように、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);
参考: