¿Cómo afirmaría sucintamente la igualdad de Collection
elementos, específicamente a Set
en JUnit 4?
java
unit-testing
collections
junit
Eqbal
fuente
fuente
Respuestas:
Puede afirmar que los dos
Set
son iguales entre sí, lo que invoca elSet
equals()
método .Esto
@Test
pasará si los dosSet
s son del mismo tamaño y contienen los mismos elementos.fuente
equals
ehashCode
implementado en la clase que está almacenando en su Hashtable?Apache commons al rescate de nuevo.
Funciona de maravilla. No sé por qué, pero descubrí que con las colecciones lo siguiente
assertEquals(coll1, coll2)
no siempre funciona. En el caso de que me fallara, tenía dos colecciones respaldadas por Sets. Ni Hamcrest ni Junit dirían que las colecciones eran iguales, aunque yo estaba seguro de que lo eran. Usando CollectionUtils funciona perfectamente.fuente
con hamcrest :
con simple aseverar:
NB: t se utiliza el método equals () de la clase de conjunto de hormigón
fuente
Un caso particularmente interesante es cuando comparas
y
Hasta ahora, la única solución que veo es convertir ambos en conjuntos
O podría compararlos elemento por elemento.
fuente
Como método adicional basado en matrices ... puede considerar el uso de aserciones de matrices desordenadas en junitx. Aunque el ejemplo de Apache CollectionUtils funcionará, también hay un paquete de extensiones sólidas de aserción:
Yo creo que el
El enfoque será mucho más legible y depurable para usted (todas las Colecciones admiten toArray (), por lo que debería ser bastante fácil usar los métodos ArrayAssert.
Por supuesto, la desventaja aquí es que, junitx es un archivo jar adicional o una entrada maven ...
fuente
Consulta este artículo . Un ejemplo de ahí:
fuente
Usando Hamcrest:
Esto también funciona cuando los conjuntos tienen diferentes tipos de datos e informa sobre la diferencia en lugar de simplemente fallar.
fuente
Si desea verificar si una Lista o Conjunto contiene un conjunto de valores específicos (en lugar de compararlo con una colección ya existente), a menudo el método toString de colecciones es útil:
Esto es un poco más corto que construir primero la colección esperada y compararla con la colección real, y más fácil de escribir y corregir.
(Es cierto que este no es un método particularmente limpio y no puede distinguir un elemento "foo, bar" de dos elementos "foo" y "bar". Pero en la práctica, creo que lo más importante es que sea fácil y rápido escribir pruebas , de lo contrario, muchos desarrolladores simplemente no lo harán sin ser presionados).
fuente
Me gusta la solución de Hans-Peter Störr ... Pero creo que no es del todo correcta. Lamentablemente
containsInAnyOrder
, no acepta unaCollection
de las objetcs para comparar. Entonces tiene que ser unaCollection
deMatcher
las siguientes:Las importaciones son:
fuente