¿Hay alguna herramienta/biblioteca que pueda generar automáticamente las pruebas para mi código hash e iguale los métodos que miran las variables de instancia involucradas en estos métodos?Generar pruebas unitarias para los métodos hashcode, equals y toString
Respuesta
guayaba utiliza this constructor de prueba para probar equals
y hashCode
.
toString()
no debe tener ningún "contrato" que respetar, por lo que la prueba de unidad sería extraño y no útil.
Puede consultar este project con respecto a equals()
.
También hay un JUnit Addon EqualsHashCodeTestCase
Sobre el mismo tema:
No veo por qué toString no podría tener una especificación, aunque nunca he probado la unidad por mí mismo. –
Bueno, no dije que no podría pero no debería.'toString()' es la representación de cadena de un objeto para que sea legible por una persona (ver javadoc para Object), así que esto dice que básicamente no debería hacer nada "extremo" (es la representación del objeto, no una método comercial) y que devuelve un String hecho para ser leído por un ser humano, no para ser analizado. A partir de ahí, es fácil decir que 'toString' no debe ser probado en unidades (no" can not "o" shall not "). –
Sí, si pruebas todas las clases, no tiene sentido. Tenga en cuenta que todavía es legal para una clase específica hacer un requisito más estricto sobre 'toString'. Hay un buen número de ejemplos en el propio JSE ('StringWriter',' StringBuilder', 'URL', ...). –
Puede utilizar Apache EqualsBuilder y HashCodeBuilder para implementar equals y hashCode y así minimizar el riesgo de no hacerlo correctamente.
La prueba equals es simple, cree dos instancias con los valores de instancia iguales (por lo que esperará que sean iguales) e invoque igual en una instancia que pase la otra como parámetro, y debe esperar que devuelva verdadero: D
La pregunta es, ¿cómo se puede probar que el contrato hashCode no está roto? ¿Cómo se deben implementar las pruebas, que se verifican después de dos cosas: 1. Si equals devuelve verdadero, entonces hashCode debe devolver los mismos valores. 2. Si hashCode devuelve valores diferentes, entonces equals debe devolver false. – mentallurg
EqualsVerifier es una gran biblioteca. A menudo me combinándolo con Reflections biblioteca para escanear automáticamente para ciertas clases y poner a prueba el contrato para todos ellos a la vez:
@Test
public void validateEqualsHashCodeToString() {
final Reflections dtoClassesReflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("my.base.package"))
.filterInputsBy(new FilterBuilder()
.include(".*Dto.*") // include all Dto classes
.exclude(".*Test.*")) // exclude classes from tests which will be scanned as well
.setScanners(new SubTypesScanner(false)));
final Set<Class<?>> allDtoClasses = dtoClassesReflections.getSubTypesOf(Object.class);
allDtoClasses.forEach(dtoClass -> {
logger.info("equals/hashCode tester testing: " + dtoClass);
EqualsVerifier.forClass(dtoClass).verify();
try {
dtoClass.getDeclaredMethod("toString");
} catch (NoSuchMethodException e) {
fail(dtoClass + " does not override toString() method");
}
});
}
- 1. Generando equals/hashcode/toString usando la anotación
- 2. Cómo generar métodos equals() y hashcode() usando wsimport en jaxws
- 3. métodos estáticos y pruebas unitarias
- 4. ¿Cómo puedo obtener checkstyle para omitir los métodos equals() y hashcode() generados por eclipse?
- 5. Java: Equals() automático y hashCode()
- 6. contrato equals() y hashCode() en Java
- 7. ¿Cómo hibernate usa equals() y hashCode()?
- 8. ¿Pruebas unitarias de métodos vacíos?
- 9. Pruebas unitarias de métodos dependientes
- 10. Hibernate: ¿Debo incluir el campo 'versión' en los métodos hashcode() y equals()
- 11. make Eclipse equals()/hashCode() use getters
- 12. En Java, ¿por qué deben equals() y hashCode() ser consistentes?
- 13. ¿Herramientas para generar automáticamente pruebas unitarias para C++?
- 14. ¿Por qué equals y hashCode se definieron en Object?
- 15. Pruebas unitarias Algunos métodos de servicio web
- 16. Pruebas unitarias de métodos privados en Xcode
- 17. Pruebas unitarias aplicadas a métodos privados
- 18. ArrayList - agregue los "mismos" objetos (same => equals, hashCode), Threads
- 19. Pruebas unitarias Primavera @ Alrededor de los métodos AOP
- 20. TDD: ¿Qué métodos expone para las pruebas unitarias?
- 21. Pruebas unitarias y SAP
- 22. Pruebas unitarias para malloc()
- 23. JUnit theory for hashCode/equals contract
- 24. Pruebas unitarias y nhibernate?
- 25. ¿Cómo funcionan los métodos del objeto toString(), ==, equals() de manera diferente o similar en los tipos de referencia y primitivo?
- 26. hashCode y es igual para Collections.unmodifiableCollection()
- 27. Pruebas unitarias ... cómo mejorarlo
- 28. ¿Cuál es el modismo estándar para implementar equals y hashCode en Scala?
- 29. Mejor práctica para organizar pruebas de selenio y pruebas unitarias
- 30. Pruebas unitarias y pruebas funcionales en CodeIgniter
Qué IDE está usando? – buymypies
Dichas pruebas no tienen un significado sustancial, pero en su mayoría introducen mantenimiento. –
@MPlatvoet Realmente no estoy de acuerdo con usted, probar 'equals()' y 'hashcode()' podría ser importante especialmente si parte de su código se basa en gran medida en eso ('HashMap', prueba de igualdad que involucra herencia) –