ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

assertjで例外発生のテストをシュッと書く

Exception を throw する可能性のある method のテストを書く時今までは

@Test(expected = NantokaException.class)

とアノテーションをつけたり

try {
    nantokaService.doNantoka();
} catch (NantokaException e) {
    assertThat(e.getMessage()).isEqualTo("Nanka");
}

として確認していたけど、前者は exception の中身を確認することはできないし後者は exception が発生しなかった場合にスルーされてしまうって問題があってちゃんと確認したいなら両方書くとかしてた。

んで、java8以後 + 最近のassertjだともっといいやり方あるよーって教えてもらって下記のように書けることを知った。

assertThatThrownBy(() -> nantokaService.doNantoka())
        .isInstanceOfSatisfying(NantokaException.class, e -> {
            assertThat(e.getMessage()).isEqualTo("Nanka");
        });

シュッとしてて良い。