2015-11-21 6 views
19

Hamcrestには、コレクションの内容をアサーションするためのいくつかのマッチャが用意されています。これらの例はすべて、合格:HamCrestのhasItems、containsおよびcontainsInAnyOrderはどのように異なるのですか?

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

はどのようhasItemscontainscontainsInAnyOrderが異なるのですか?

答えて

25

hasItems checks:検査のIterable収率指定itemsから対応する項目と同じである少なくとも一つのアイテム上

連続通過します。ある

は、それがコレクションは少なくともこれらの項目、任意の順序でが含まれていることを確認します。従って、

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

また、余分な項目は無視されます。そして:

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

も合格します。

contains checks:検査Iterable

単一のパスが指定された項目に対応する項目のそれぞれは、論理的に等しい、アイテムのシリーズをもたらします。肯定的な一致の場合、検査される反復可能要素は、指定された項目の数と同じ長さでなければなりません。 "three"が一致していない残りとして、

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

これは失敗します:

は、だから、コレクションが正確これらの項目が含まれていることを確認します。

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

これは、対応する項目が一致しないために失敗します。

正確にそれらの項目が存在するが、任意の順序で別の関連整合、containsInAnyOrderchecks

調べIterable上の単一パスでの一連を生じる場合一致Iterablesためにとらわれない整合を作成各項目は論理的には指定された項目のどこか1つの項目に等しい。

欠品とのテストが失敗した:

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

しかし、異なる順序ですべての項目が渡されます:

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