Me pregunto cómo la gente prueba la unidad y afirman que la colección "esperada" es la misma/similar que la colección "real" (el orden no es importante).¿La mejor manera de recopilar la prueba unitaria?
Para realizar esta afirmación, escribí mi API simple aserción: -
public void assertCollection(Collection<?> expectedCollection, Collection<?> actualCollection) {
assertNotNull(expectedCollection);
assertNotNull(actualCollection);
assertEquals(expectedCollection.size(), actualCollection.size());
assertTrue(expectedCollection.containsAll(actualCollection));
assertTrue(actualCollection.containsAll(expectedCollection));
}
Bueno, funciona. Es bastante simple si afirmo solo un montón de enteros o cadenas. También puede ser muy doloroso si intento afirmar una colección de dominios de Hibernate, por ejemplo, por ejemplo. The collection.containsAll (..) depende de los iguales (..) para realizar el control, pero siempre anulo los iguales (..) en mis dominios de Hibernate para verificar solo las claves de negocios (que es la mejor práctica declarada en el Sitio web de Hibernate) y no todos los campos de ese dominio. Claro, tiene sentido comprobar solo en contra de las claves de negocios, pero hay momentos en los que realmente quiero asegurarme de que todos los campos sean correctos, no solo las claves de negocios (por ejemplo, el nuevo registro de entrada de datos). Entonces, en este caso, no puedo perder el control con los Domain.equals (..) y casi parece que necesito implementar algunos comparadores para fines de pruebas unitarias en lugar de confiar en collection.containsAll (..).
¿Hay algunas bibliotecas de prueba que podría aprovechar aquí? ¿Cómo pruebas tu colección?
Gracias.
esto parece una buena manera para mi afirmación de colección. Si A amplía B, supongo que tendrá en cuenta los campos de A y B, ¿es correcto? No puedo encontrarlo en la documentación de la API, pero supongo que puedo probarlo. ¿Hay alguna manera de especificar una regla para afirmar solo los campos de A y no de B? – limc
bien, esto es bastante impresionante ... solo lea la documentación, y parece que debería usar ReflectionAssert.assertLenientEquals (..) ya que eso no tiene en cuenta el orden del artículo. Muchas gracias. – limc
@limc. De nada. No estoy seguro de cómo verificar los campos de las subclases (es posible, nunca lo intenté). –