Я разрабатываю Java-приложение с множеством сложных запросов к спящим критериям. Я бы хотел проверить эти критерии, чтобы убедиться, что они выбирают правильные и только правильные объекты. Один из подходов к этому, конечно, состоит в том, чтобы создать базу данных в памяти (например, 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, которая делает такой тип тестирования возможным?