JUnit5の楽しみな機能たち

きしだのはてなさんの最新記事で「JUnit5で変わるテストの書き方」という面白そうな記事を発見。

記事自体も面白くまとめられていて、JUnit5の興味をひくものだったのでJUnit5について色々調べてみましたがやはり面白そうでした。

というわけで、今回はJUnit5でとくに面白そうな機能をまとめていきます。(今回は思ったことをまとめる備忘録というか書き殴り系の記事です。)

[スポンサーリンク]

気になった機能の一覧

JUnit5で気になった楽しみな機能は大きくはこの2つですね。
それでは次以降でそれぞれについてみていきましょう。

  1. @Nested
  2. ラムダ式が使えるようになったこと

@Nested

1つのクラス内にある複数のメソッドをいくつかのグループにわけることのできる機能ですね。

たとえば、1つのクラス内のグループAとBがあって、グループAだけには特別な前処理をするということも@Nestedを使えばできるようになります。

視覚的にどんなグループかがひと目でわかるようになるものうれしい機能ですね。

詳しくはきしだのはてなさんで説明されているのでぜひこちらをご覧下さい。

ラムダ式が使えるようになったこと

個人的にはJUnit5の最大の売り(使うことのメリット)とは、Java8で使えるようになったラムダがJUnit5で提供しているメソッド(assertEqualstとか)で使えるようになったことではないでしょうか。

たとえばこのような感じで、assertEqualsでラムダが使えます。

@Test
 void test() {
 assertEquals(3 == 2, true, () -> "比較処理失敗!");
 }

ただですね。。。。
現段階では上記のような使い方ですが、どのような場面で使うのか今ひとつ使い所がわかりません。
まあ、こればかりはもう少し本格的に使っていけば使い所も見えてくるはず!

今見えているラムダ式を使った素晴らしい使い方は、例外発生時のテストではないでえしょうか。

今までのJUnit4の例外発生時のテスト方法って、try-catchを使うか@Ruleを使うかのどちらかでした。

でもですね、正直どちらも今ひとつ感があって決して使いやすいという感じじゃありませんでした。

それがなんと!JUnit5のやり方だとかなりわかりやすい記述になります!

記述方法はこちら。
throwExceptionというメソッドでテスト対象のメソッドを評価しています。

@Test
void test() {
  assertThrows(NullPointerException.class, () -> throwException());
}
void throwException() {
  throw new NullPointerException("test exception");
}

@Ruleの書き方は以前コチラで書きましたが、JUnit5の方が直感的にも非常に読みやすくなったと思います。

@Ruleのように例外の中のメッセージも評価するこは可能です。
こんな感じでやります。

@Test
void test() {
  NullPointerException exception = 
  assertThrows(NullPointerException.class, () -> throwException());
   assertEquals(exception.getMessage(),"test exception");
}
void throwException() {
  throw new NullPointerException("test exception");
}

例外のテストがだいぶスッキリしましたね!

今回参考にしたサイトはコチラです。

新しく追加されたアノテーション

公式ドキュメントの3.1. Annotationsにアノテーションの一覧があります。

@Disabledや@ExtendWithはJUnit5から登場したアノテーションですが、じつはまだ使い方はよくわかっていません。。

今後使っていってわかってきたらこのブログでも取り上げてみようと考えていますが、たぶん便利になったものだと思います。(と思いたい。)

さいごに

JUnit5はまだまだわからないことばかりですが、それでもやはり楽しみですね。

ラムダが使えるようなったので今までの書き方とはだいぶ様変わりするように思います。

しかし、JUnit5にも課題があるのではないでしょうか。たとえば、Junit4で動いていたライブラリ(Mockitoとか)がJunit5でも難なく動いてくれるかどうかというのは個人的には超重要なことです。

まあ、JUnit5が浸透するまでにはもう少し時間がかかりそうではありますが、その頃までには使いこなせるように頑張って覚えてみたいものです。

それでは!