Como você afirmaria sucintamente a igualdade dos Collection
elementos, especificamente a Set
na JUnit 4?
java
unit-testing
collections
junit
Eqbal
fonte
fonte
Respostas:
Você pode afirmar que os dois
Set
s são iguais um ao outro, o que invoca oSet
equals()
método .Isso
@Test
passará se os doisSet
s tiverem o mesmo tamanho e contiverem os mesmos elementos.fonte
equals
ehashCode
implementou na classe que está armazenando em seu Hashtable?Apache commons para o resgate novamente.
Funciona como um encanto. Não sei por que, mas descobri que com coleções o seguinte
assertEquals(coll1, coll2)
nem sempre funciona. No caso em que falhou para mim, eu tinha duas coleções apoiadas por Sets. Nem hamcrest nem junit diriam que as coleções eram iguais, embora eu tivesse certeza de que eram. Usando CollectionUtils funciona perfeitamente.fonte
com hamcrest :
com afirmação simples:
NB: t o método equals () da classe de conjunto concreto é usado
fonte
Um caso particularmente interessante é quando você compara
e
Até agora, a única solução que vejo é transformar os dois em conjuntos
Ou eu poderia compará-los elemento por elemento.
fonte
Como um método adicional baseado em array ... você pode considerar o uso de asserções de array não ordenadas em junitx. Embora o exemplo do Apache CollectionUtils funcione, também há uma série de extensões de asserção sólidas:
Eu acho que o
A abordagem será muito mais legível e depurável para você (todas as Coleções suportam toArray (), portanto, deve ser fácil o suficiente para usar os métodos ArrayAssert.
Claro que a desvantagem aqui é que, junitx é um arquivo jar adicional ou uma entrada maven ...
fonte
Verifique este artigo . Um exemplo disso:
fonte
Usando Hamcrest:
Isso também funciona quando os conjuntos têm diferentes tipos de dados e relata a diferença em vez de apenas falhar.
fonte
Se você deseja verificar se uma Lista ou Conjunto contém um conjunto de valores específicos (em vez de compará-lo com uma coleção já existente), muitas vezes o método toString de coleções é útil:
Isso é um pouco mais curto do que primeiro construir a coleção esperada e compará-la com a coleção real, e mais fácil de escrever e corrigir.
(Reconhecidamente, este não é um método particularmente limpo e não consegue distinguir um elemento "foo, bar" de dois elementos "foo" e "bar". Mas, na prática, acho que é mais importante que seja fácil e rápido escrever testes , caso contrário, muitos desenvolvedores simplesmente não o farão sem serem pressionados.)
fonte
Gosto da solução de Hans-Peter Störr ... Mas acho que não está totalmente correta. Infelizmente
containsInAnyOrder
, não aceitaCollection
objetos para comparar. Portanto, tem que ser umCollection
deMatcher
s:As importações são:
fonte