日々精進

新しく学んだことを書き留めていきます

JUnitで例外がthrowされるケースのテストをしたら「Exception in thread "pool-1-thread-1" java.lang.RuntimeException」が出て鬱陶しい

以下のような感じで例外がthrowされることをテストした場合。

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

想定通りのExceptionが出てテストが成功する場合でも、「Exception in thread "pool-1-thread-1" java.lang.RuntimeException」みたいなエラーメッセージがログに出てしまいドキッとする。

そんな場合は以下のようにbackground thread全体のUncaughtExceptionHandlerを何もしない関数に一旦置き換えてテストを実行するとログを抑止できる。

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

ただし、テストを並列実行している場合は他のテストでthrowされた例外のエラーログが出なくなるリスクがあるので注意。