Как тестировать запросы критериев Hibernate без использования какой-либо базы данных?

Я разрабатываю приложение 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, которая делает возможным такой тест?

10
задан Otavio Macedo 16 February 2012 в 18:56
поделиться