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