Hamcrestは、コレクションのコンテンツをアサートするためのいくつかのマッチャーを提供します。これらのケースはすべて合格します。
Collection<String> c = ImmutableList.of("one", "two", "three");
assertThat(c, hasItems("one", "two", "three");
assertThat(c, contains("one", "two", "three");
assertThat(c, containsInAnyOrder("one", "two", "three");
hasItems
、contains
、およびcontainsInAnyOrder
の違いは何ですか?
調べたIterableを連続して渡すと、指定した
items
の対応するアイテムと等しいアイテムが少なくとも1つ生成されます。
つまり、コレクションに少なくともこれらの項目が含まれ、任意の順序。そう、
assertThat(c, hasItems("one", "two"));
また、余分なアイテムは無視され、パスします。そして:
assertThat(c, hasItems("three", "two", "one"));
合格します。
検査された
Iterable
を1回パスすると、一連のアイテムが生成されます。各アイテムは、指定されたアイテムの対応するアイテムと論理的に等しくなります。正の一致の場合、検査される反復可能オブジェクトは、指定されたアイテムの数と同じ長さでなければなりません。
したがって、コレクションにexactlyこれらのアイテムが含まれていることを確認します。
assertThat(c, contains("one", "two")); // Fails
残りの"three"
は一致しません。
assertThat(c, contains("three", "two", "one")); // Fails
対応するアイテムが一致しないため、これは失敗します。
別の関連するマッチャーcontainsInAnyOrder
、 checks 正確にそれらのアイテムが存在するが、任意の順序で:
検査された
Iterables
を1回パスすることで、指定されたアイテム内の任意の1つのアイテムに論理的に等しい一連のアイテムが得られる場合に一致するIterable
の順序非依存マッチャーを作成します。
不足しているアイテムのテストは失敗します。
assertThat(c, containsInAnyOrder("one", "two")); // Fails
ただし、異なる順序のすべてのアイテムは合格します。
assertThat(c, containsInAnyOrder("three", "two", "one"));