Estoy desarrollando una aplicación Java con muchas consultas complejas de criterios de Hibernate. Me gustaría probar estos criterios para asegurarme de que están seleccionando los objetos correctos, y solo los correctos. Un enfoque para esto, por supuesto, es establecer una base de datos en memoria (por ejemplo, HSQL) y, en cada prueba, realizar un viaje de ida y vuelta a esa base de datos utilizando los criterios y luego afirmar que los resultados de la consulta coinciden con mis expectativas.Cómo probar las consultas de criterios de Hibernate sin usar ninguna base de datos?
Pero estoy buscando una solución más simple, ya que los criterios de Hibernate son solo un tipo especial de predicados lógicos sobre los objetos de Java. Por lo tanto, podrían, en teoría, probarse sin acceder a ninguna base de datos en absoluto. Por ejemplo, suponiendo que existe una entidad llamada Cat
:
class Cat {
Cat(String name, Integer age){
this.name = name;
this.age = age;
}
...
}
me gustaría hacer algo como esto, para crear consultas de criterios:
InMemoryCriteria criteria = InMemoryCriteria.forClass(Cat.class)
.add(Restrictions.like("name", "Fritz%"))
.add(Restrictions.or(
Restrictions.eq("age", new Integer(0)),
Restrictions.isNull("age")))
assertTrue(criteria.apply(new Cat("Foo", 0)))
assertTrue(criteria.apply(new Cat("Fritz Lang", 12)))
assertFalse(criteria.apply(new Cat("Foo", 12)))
Los criterios podrían ser utilizados en el código de producción como esta :
criteria.getExecutableCriteria(session); //similar to DetachedCriteria
¿Hay alguna biblioteca de Java que haga este tipo de prueba posible?
¡Gracias por responder! Pero, como usted señala, este tipo de prueba verifica cómo se implementa la clase *, no cómo se supone que * se comporte *. Además, esta prueba se centra en otro servicio, que usa los criterios. Aunque esta es sin duda una funcionalidad importante, debería ser relativamente fácil de probar (desacoplando las clases con el uso correcto de las interfaces, la separación de responsabilidades, etc.). Aquí, estoy más interesado en probar el objeto Criteria en sí mismo. –