J'essaye de comparer 2 listes:
assertThat(actual.getList(), is(Matchers.containsInAnyOrder(expectedList)));
Mais idée
java: no suitable method found for assertThat(java.util.List<Agent>,org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>>)
method org.junit.Assert.<T>assertThat(T,org.hamcrest.Matcher<T>) is not applicable
(no instance(s) of type variable(s) T exist so that argument type org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>> conforms to formal parameter type org.hamcrest.Matcher<T>)
method org.junit.Assert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
Comment dois-je l'écrire?
containsInAnyOrder
exige que tous les éléments soient présents, de sorte que la première assertion échouera. VoyezhasItems
si vous voulez vérifier qu'au moins ces éléments sont présents.actual.getList()
arrive à contenir"item1", "item3", "item2"
, le test passera et vous voudrez peut-être vous assurer qu'il ne contient que les éléments répertoriés ... Dans ce cas, vous pouvez utiliserassertThat(actual.getList().size(), equalTo(2));
avant le containsInAnyOrder, vous vous assurez ainsi que les deux listes ont le même contenu.hasItems
. Le contrôle supplémentaire n'est pas nécessaire ici. Voir le commentaire à Tim ci-dessus, et aussi Comment les hasItems, contains et containsInAnyOrder de Hamcrest diffèrent-ils?*expectedList.toTypedArray()
) lors du passage d'un tableau en varargs!Version plus courte de la réponse de @ Joe sans paramètres redondants.
la source
Pour compléter la réponse de @ Joe:
Hamcrest vous propose trois méthodes principales pour faire correspondre une liste:
contains
Vérifie la correspondance de tous les éléments en prenant en compte l'ordre, si la liste a plus ou moins d'éléments, elle échoueracontainsInAnyOrder
Vérifie la correspondance de tous les éléments et peu importe l'ordre, si la liste contient plus ou moins d'éléments, échouerahasItems
Vérifie uniquement les objets spécifiés, peu importe si la liste en contient plushasItem
Vérifie un seul objet, peu importe si la liste en contient plusTous peuvent recevoir une liste d'objets et utiliser une
equals
méthode de comparaison ou peuvent être mélangés avec d'autres correspondants comme @borjab mentionné:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html#contains (E ...) http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html #containsInAnyOrder (java.util.Collection) http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html#hasItems (T ...)
la source
Avec les bibliothèques Hamcrest existantes (à partir de la v.2.0.0.0), vous êtes obligé d'utiliser la méthode Collection.toArray () sur votre Collection afin d'utiliser le Matcher containsInAnyOrder. Il serait préférable d'ajouter ceci en tant que méthode distincte à org.hamcrest.Matchers:
En fait, j'ai fini par ajouter cette méthode à ma bibliothèque de tests personnalisés et l'utiliser pour augmenter la lisibilité de mes cas de test (en raison de moins de verbosité).
la source
Assurez-vous que les
Object
s de votre liste y sontequals()
définis. ensuitetravaux.
la source
Pour la liste des objets, vous aurez peut-être besoin de quelque chose comme ceci:
Utilisez containsInAnyOrder si vous ne souhaitez pas vérifier l'ordre des objets.
PS Toute aide pour éviter l'avertissement supprimé sera vraiment appréciée.
la source
Pour comparer deux listes avec l'ordre d'utilisation conservé,
la source
actualList
contient les éléments à l'intérieur ducontains
matcher, cela échouera si les éléments ne sont pas dans le même ordre et échouera également s'il contient plus d'éléments ou s'il en manque un.