このページでは
Matchers(CoreMatchers)のCollection(Iterableも含む)とMapの検証について
注意点と使い方をまとめる。

この他のMatcherの検証については、こちらのページを参照。
(このサイト内の別記事)

Iterableの検証
検証内容 メソッド Matchers CoreMatchers
空のIterableであるか emptyIterable()
指定した型がバインドされた空のIterableであるか emptyIterableOf()
すべての要素にマッチするか everyItem()
指定した要素が一つでも一致する(マッチする)か hasItem()
指定した複数の各要素が一つでも一致する(マッチする)か hasItems()
各要素がすべて一致(マッチする)するか contains()
順序に関係なく各要素がすべて一致(マッチする)するか containsInAnyOrder()
Collectionの検証
検証内容 メソッド Matchers CoreMatchers
空のCollectionであるか empty()
指定した型を要素に持つ空のCollectionであるか emptyCollectionOf()
指定したサイズであるか hasSize()
Mapの検証
検証内容 メソッド Matchers CoreMatchers
指定したキーを持っているか hasKey()
指定した値を持っているか hasValue()
指定したエントリーを持っているか hasEntry()

Iterableの検証

空のIterableであるか - emptyIterable()

List<String> actual = Collections.emptyList();
assertThat(actual, is(emptyIterable()));

指定した型がバインドされた空のIterableであるか - emptyIterableOf()

emptyIterable()に加えて、
バインドされた型も検証する

List<String> actual = Collections.emptyList();
assertThat(actual, is(emptyIterableOf(String.class)));

すべての要素にマッチするか - everyItem()

引数で指定したMatcherを各要素で評価して
すべての要素でtrueになれば検証OK。

List<String> actual = Arrays.asList("Hello", "World");
assertThat(actual, everyItem(containsString("o")));

指定した要素が一つでも一致する(マッチする)か - hasItem()

指定した要素が一つでも一致したら、
検証OK。

List<String> actual = Arrays.asList("Hello", "World", "!!");
assertThat(actual, hasItem("World"));

指定した複数の各要素が一つでも一致する(マッチする)か - hasItems()

hasItem()の複数指定可能版。

List<String> actual = Arrays.asList("Hello", "World", "!!");
assertThat(actual, hasItems("Hello", "!!"));

各要素がすべて一致(マッチする)するか - contains()

順序も含めた完全一致。

containsには含めるの意味があるが、等しいという意味もある。

List<String> actual = Arrays.asList("Hello", "World", "!!");
assertThat(actual, contains("Hello", "World", "!!"));

順序に関係なく各要素がすべて一致(マッチする)するか - containsInAnyOrder()

contains()の順序を無視できる版。

List<String> actual = Arrays.asList("Hello", "World", "!!");
assertThat(actual, containsInAnyOrder("World", "!!", "Hello"));

Collectionの検証

空のCollectionであるか - empty()

Collection#isEmpty()を用いた検証。

Collection<?> actual = Collections.emptyList();
assertThat(actual, is(empty()));

指定した型を要素に持つ空のCollectionであるか - emptyCollectionOf()

empty()に加えて、
バインドされた型も検証する

Collection<String> actual = Collections.emptyList();
assertThat(actual, is(emptyCollectionOf(String.class)));

指定したサイズであるか - hasSize()

Collection#size()を用いた検証。

Collection<String> actual = Arrays.asList("Hello", "World", "!!");
assertThat(actual, hasSize(3));

Mapの検証

指定したキーを持っているか - hasKey()

Map<Integer, String> actual = Collections.singletonMap(1, "Hello");
assertThat(actual, hasKey(1));

指定した値を持っているか - hasValue()

Map<Integer, String> actual = Collections.singletonMap(1, "Hello");
assertThat(actual, hasValue("Hello"));

指定したエントリーを持っているか - hasEntry()

Map<Integer, String> actual = Collections.singletonMap(1, "Hello");
assertThat(actual, hasEntry(1, "Hello"));

PR