Junit4.4から assertThat というアサーションメソッドが追加された。
APIの定義は以下の通り。
public static <T> void assertThat(T actual, org.hamcrest.Matcher<T> matcher) public static <T> void assertThat(java.lang.String reason, T actual, org.hamcrest.Matcher<T> matcher)
以下の様に、英語として読みやすい記述でアサーションを記述できる。
import static org.hamcrest.CoreMatchers.*; public class Test1 { @Test public void test() throws Exception { assertThat(Integer.parseInt("100"), is(100)); } }
否定なども、下記のように読み下しやすく記載できる。
assertThat(Integer.parseInt("100"), is(not(10)));
このように、assertThatは汎用的なアサーションとして利用できる。matcherとしては以下の2つのクラスがデフォルトで提供されている。
- org.hamcrest.CoreMatchers
- org.junit.matchers.JUnitMatchers
org.hamcrest.CoreMatchersのメソッド
allOf | Matcherを可変長引数で渡す。全ての比較メソッドがtrueとなるかを評価 |
anyOf | Matcherを可変長引数で渡す。いずれかの比較メソッドがtrueとなるかを評価 |
anything | 常にtrueとなる |
describedAs | エラー詳細の出力を指定 |
equalTo | Object.equalsメソッドによる同値性を評価 |
instanceOf | 指定したクラスのインスタンスであるかを評価 |
is | assertThat(Integer.parseInt("100"), is(100)); |
not | assertThat(Integer.parseInt("100"), is(not(50)); |
notNullValue | 値がnullでないことを評価 |
nullValue | 値がnullであることを評価 |
sameInstance | 指定したインスタンスと同じであることを評価 |
詳しくは以下を参照してください
org.junit.matchers.JUnitMatchersのメソッド
both | assertThat(string, both(containsString("a")).and(containsString("b"))); |
containsString | assertThat(string, containsString("a")); |
either | assertThat(string, either(containsString("a")).or(containsString("b"))); |
everyItem | 指定した全ての値を保持しているかを検証 |
hasItem | 指定した値を保持しているかを検証 |