Estoy tratando de comparar 2 listas:
assertThat(actual.getList(), is(Matchers.containsInAnyOrder(expectedList)));Pero idea
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)¿Cómo debo escribirlo?

containsInAnyOrderrequiere que todos los elementos estén presentes, por lo que la primera afirmación fallará. VeahasItemssi desea verificar que al menos esos elementos estén presentes.actual.getList()contiene"item1", "item3", "item2", la prueba pasará y tal vez desee asegurarse de que solo contenga los elementos enumerados ... En ese caso, podría usarassertThat(actual.getList().size(), equalTo(2));antes de containsInAnyOrder, de esta manera se asegura de que ambas listas tengan el mismo contenido.hasItems. El cheque adicional no es necesario aquí. Vea el comentario a Tim arriba, y también ¿En qué se diferencian hasItems, contains y containsInAnyOrder de Hamcrest?*expectedList.toTypedArray()) al pasar una matriz como varargs!Versión más corta de la respuesta de @ Joe sin parámetros redundantes.
fuente
Para complementar la respuesta de @ Joe:
Hamcrest le proporciona tres métodos principales para hacer coincidir una lista:
containsComprueba la coincidencia de todos los elementos tomando en cuenta el orden, si la lista tiene más o menos elementos, fallarácontainsInAnyOrderComprueba que coincidan todos los elementos y no importa el orden, si la lista tiene más o menos elementos, fallaráhasItemsComprueba solo los objetos especificados, no importa si la lista tiene máshasItemComprueba solo un objeto, no importa si la lista tiene másTodos ellos pueden recibir una lista de objetos y usar el
equalsmétodo de comparación o se pueden mezclar con otros comparadores como @borjab mencionado: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 ...)
fuente
Con las bibliotecas de Hamcrest existentes (a partir de la versión 2.0.0.0), está obligado a usar el método Collection.toArray () en su colección para usar containsInAnyOrder Matcher. Mucho mejor sería agregar esto como un método separado a org.hamcrest.Matchers:
En realidad, terminé agregando este método a mi biblioteca de prueba personalizada y lo usé para aumentar la legibilidad de mis casos de prueba (debido a la menor verbosidad).
fuente
Asegúrese de que las
Objects de su lista se hayanequals()definido. Luegotrabajos.
fuente
Para obtener una lista de objetos, es posible que necesite algo como esto:
Use containsInAnyOrder si no desea verificar el orden de los objetos.
PD Cualquier ayuda para evitar la advertencia que se suprime será muy apreciada.
fuente
Para comparar dos listas con el orden de uso conservado,
fuente
actualListcontiene los elementos dentro delcontainsmatcher, que fallará si los elementos no están en el mismo orden y fallará también si contiene más elementos o falta uno.