2015-11-21 8 views
19

Hamcrest fornisce un numero di abbinamenti per affermare il contenuto di una collezione. Tutti questi casi passano:In che modo gli hasItem di Hamcrest contengono e contieneInAnyOrder?

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

Come hasItems, contains e containsInAnyOrder differiscono?

risposta

25

hasItems checks:

passaggi consecutivi sul rendimento Iterable esaminato almeno un elemento che è uguale alla corrispondente del specificato items.

Cioè, si fa in modo che le collezioni contiene almeno questi elementi, in qualsiasi ordine. Quindi,

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

passerebbe anche, con l'elemento in più che viene ignorato. E:

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

passare anche.

contains checks:

un unico passaggio sulla esaminato Iterable produce una serie di elementi, ognuno logicamente pari alla corrispondente voce gli elementi specificati. Per una corrispondenza positiva, l'iterabile esaminato deve essere della stessa lunghezza del numero di elementi specificati.

Così fa in modo che la raccolta contiene esattamente questi elementi:

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

Ciò fallire, come il residuo "three" non corrisponde.

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

Ciò non riesce perché gli elementi corrispondenti non corrispondono.

Un'altra matcher correlato, containsInAnyOrder, checks che esattamente tali elementi sono presenti, ma in qualsiasi ordine:

crea un matcher agnostico affinché Iterables che corrisponde quando un singolo passaggio sulla esaminato Iterable produce una serie di articoli, ciascuno logicamente uguale a un elemento in qualsiasi punto degli articoli specificati.

Un test con un elemento mancante fallisce:

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

Ma tutti gli elementi in un ordine diverso passerà:

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