assertThatって何だっけ?

久々にテストコード書くことになって、
色々忘れちゃってたので今度は忘れないようにメモしてきます。


今回のテーマは「assertThat」


なぜこれかというと、twitterでこの単語を見かけたけど、
「それ何だっけ?」と思ったからです(;´Д`)

assertThatとは?

JUnit4.4で追加されたアサーションメソッド。
今までは、assertEqualsやassertNullなど、比較するものによってメソッドを使い分けていたが、
assertThatでは、引数で何を比較するかを指定することができる。
(引用元:JUnit4 - TRANCE ARTS 技術情報Wiki

同値チェック
今まで

// assertEquals(期待値, 実行値);
assertEquals(3, 1 + 2);

assertThatを使用

// assertThat(実行値, is(期待値));
assertThat(1 + 2, is(3));

assertThatを使うメリット

あと、比較処理のバリエーションが凄く増えたと思う。(知らないだけかもだけど
他のアサーションメソッドは、全部assertThatで置き換えれるようなので、
これからは全部assertThatで書こうと思います(*`ω´)ノ

org.hamcrest.Matcher

assertThatの第2引数に指定してるのは、org.hamcrest.Matcherとかいう型です。
org.hamcrest.Matcherの他に、org.junit.matchers.JUnitMatchersとかあるみたいですが、
よく使うのは、Junit4.4に同梱されてる「org.hamcrest.CoreMatcher」なので、まずはこれを覚えましょう。
hamcrest の CoreMatchers 詳細 - A Memorandum

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

↑こんな感じでAssertとMatcherは入力楽に、見た目さっぱりさせるために、static importして使いますが、
Matcherので*使うのは、mockitoのstatic importと併用した時に識別子名が被るかもなので注意だそうです。
(参考:hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS

ひとこと

assertEquals(理論値, 実行値)
が正しいんですね。。理論値と実行値を逆にしてましたごめんなさいm(_ _)m