Estou tentando comparar 2 listas:
assertThat(actual.getList(), is(Matchers.containsInAnyOrder(expectedList)));
Mas ideia
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)
Como devo escrever?
containsInAnyOrder
requer que todos os elementos estejam presentes, para que a primeira afirmação falhe. VejahasItems
se você deseja verificar se pelo menos esses elementos estão presentes.actual.getList()
acontecer de conter"item1", "item3", "item2"
, o teste será aprovado e talvez você queira ter certeza de que contém apenas os itens listados ... Nesse caso, você pode usarassertThat(actual.getList().size(), equalTo(2));
antes de containsInAnyOrder, dessa forma você garante que ambas as listas tenham o mesmo conteúdo.hasItems
. A verificação extra é desnecessária aqui. Veja o comentário de Tim acima e também Como os hasItems, contains e containsInAnyOrder de Hamcrest diferem?*expectedList.toTypedArray()
) ao passar um array como varargs!Versão mais curta da resposta de @Joe sem parâmetros redundantes.
fonte
Para complementar a resposta de @Joe:
O Hamcrest fornece três métodos principais para combinar uma lista:
contains
Verifica a correspondência de todos os elementos levando em conta a ordem, se a lista tiver mais ou menos elementos, ela falharácontainsInAnyOrder
Verifica se há correspondência de todos os elementos e não importa a ordem, se a lista tiver mais ou menos elementos, irá falharhasItems
Verifica apenas os objetos especificados, não importa se a lista tem maishasItem
Verifica apenas um objeto, não importa se a lista tem maisTodos eles podem receber uma lista de objetos e usar
equals
método para comparação ou podem ser misturados com outros matchers como o @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 ...)
fonte
Com as bibliotecas Hamcrest existentes (a partir da v.2.0.0.0), você é forçado a usar o método Collection.toArray () em sua coleção para usar o Matcher containsInAnyOrder. Muito melhor seria adicionar isso como um método separado para org.hamcrest.Matchers:
Na verdade, acabei adicionando esse método à minha biblioteca de teste customizada e usei-o para aumentar a legibilidade dos meus casos de teste (devido à menor verbosidade).
fonte
Certifique-se de que os
Object
s em sua lista osequals()
definiram. Entãotrabalho.
fonte
Para uma lista de objetos, você pode precisar de algo assim:
Use containsInAnyOrder se não quiser verificar a ordem dos objetos.
PS Qualquer ajuda para evitar o aviso que é suprimido será muito apreciada.
fonte
Para comparar duas listas com a ordem de uso preservado,
fonte
actualList
contém os elementos dentro docontains
matcher, que falhará se os elementos não estiverem na mesma ordem e falhará também se contiver mais elementos ou estiver faltando um.