Я разрабатываю приложение Java с множеством сложных запросов критериев Hibernate. Я хотел бы протестировать эти критерии, чтобы убедиться, что они выбирают правильные и только правильные объекты. Один из подходов к этому, конечно же, - настроить в памяти базы данных (например, HSQL) и в каждом тесте совершать круговой обход этой базы данных, используя критерии, а затем утверждать, что результаты запроса соответствуют моим ожиданиям.
ищу более простое решение, поскольку критерии Hibernate - это просто особый вид логических предикатов об объектах Java. Таким образом, теоретически они могут быть протестированы без доступа к какой-либо базе данных. Например, предполагая, что существует сущность с именем Cat
:
class Cat {
Cat(String name, Integer age){
this.name = name;
this.age = age;
}
...
}
, я хотел бы сделать что-то вроде этого, чтобы создать запросы критериев:
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)))
Критерии могут использоваться в производственном коде следующим образом:
criteria.getExecutableCriteria(session); //similar to DetachedCriteria
Есть ли какая-нибудь библиотека Java, которая делает возможным такой тест?