web-dev-qa-db-ja.com

HamcrestのhasItems、contains、およびcontainsInAnyOrderの違いは何ですか?

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");

hasItemscontains、およびcontainsInAnyOrderの違いは何ですか?

42
Joe

hasItemsチェック

調べたIterableを連続して渡すと、指定したitemsの対応するアイテムと等しいアイテムが少なくとも1つ生成されます。

つまり、コレクションに少なくともこれらの項目が含まれ、任意の順序。そう、

assertThat(c, hasItems("one", "two"));

また、余分なアイテムは無視され、パスします。そして:

assertThat(c, hasItems("three", "two", "one"));

合格します。

containsチェック

検査されたIterableを1回パスすると、一連のアイテムが生成されます。各アイテムは、指定されたアイテムの対応するアイテムと論理的に等しくなります。正の一致の場合、検査される反復可能オブジェクトは、指定されたアイテムの数と同じ長さでなければなりません。

したがって、コレクションにexactlyこれらのアイテムが含まれていることを確認します。

assertThat(c, contains("one", "two")); // Fails

残りの"three"は一致しません。

assertThat(c, contains("three", "two", "one")); // Fails

対応するアイテムが一致しないため、これは失敗します。

別の関連するマッチャーcontainsInAnyOrderchecks 正確にそれらのアイテムが存在するが、任意の順序で:

検査されたIterablesを1回パスすることで、指定されたアイテム内の任意の1つのアイテムに論理的に等しい一連のアイテムが得られる場合に一致するIterableの順序非依存マッチャーを作成します。

不足しているアイテムのテストは失敗します。

assertThat(c, containsInAnyOrder("one", "two")); // Fails

ただし、異なる順序のすべてのアイテムは合格します。

assertThat(c, containsInAnyOrder("three", "two", "one"));
57
Joe