Y a-t-il un matcheur dans Hamcrest pour comparer les collections pour l'égalité?
Il y a Merci d'avance! P> contient code> et
contenant) code> mais j'ai besoin
égale code> non liée au type de collecte de béton.
Par exemple. Je ne peux pas comparer les arrayes.Aslist et map.Values avec HamCrest
Equals Code>. P>
3 Réponses :
Je ne peux pas comparer les tableaux.Aslist et Carte.Values avec Hamcrest équivaut. P> blockQuote>
Ceci est dû aux signatures de type trop zélé de Hamcrest. Vous peut em> faire cette comparaison sur l'égalité, mais vous devez faire appel à la liste code> objet code> à
collection code> avant de compiler. P>
Je dois souvent faire casting avec Hamcrest, ce qui se passe tort, mais c'est le seul moyen de l'obtenir pour compiler parfois. P>
Le casting à une collection peut fonctionner, mais cela rend certaines hypothèses sur les implémentations de la collecte sous-jacente (par exemple, la commande?). Une approche plus générale serait d'écrire votre propre matcheur.
Voici une implémentation de correspondance presque complète qui fait ce que vous voulez (vous aurez besoin de remplir la méthode des importations et des décrites). Notez que cette mise en œuvre nécessite que tous les éléments de deux collections soient égaux, mais pas nécessairement dans le même ordre. P>
public class IsCollectionOf<T> extends TypeSafeMatcher<Collection<T>> { private final Collection<T> expected; public IsCollectionOf(Collection<T> expected) { this.expected = expected; } public boolean matchesSafely(Collection<T> given) { List<T> tmp = new ArrayList<T>(expected); for (T t : given) { if (!tmp.remove(t)) { return false; } return tmp.isEmpty(); } // describeTo here public static <T> Matcher<Collection<T>> ofItems(T... items) { return new IsCollectionOf<T>(Arrays.asList(items)); } }
Si vous avez des problèmes avec la méthode Equals de la mise en œuvre des collections, vous pouvez également copier les collections:
assertThat(actual, both(everyItem(isIn(expected))).and(containsInAnyOrder(expected)));
Voir aussi Stackoverflow.com/q/2509293/21499
Arrays.Aslist (). Equals (nouveau hashmap <> (). valeurs ()) == FAUX code>
Liste code> s et
SET code> s ne sont jamais égal à l'autre.