Sto sviluppando un'applicazione Java con molte query di criteri Hibernate complesse. Vorrei testare questi criteri per assicurarmi che stiano selezionando gli oggetti giusti e solo quelli giusti. Un approccio a questo, ovviamente, consiste nell'impostare un database in memoria (ad esempio HSQL) e, in ciascun test, effettuare un round trip su quel database utilizzando i criteri e quindi asserire che i risultati della query corrispondono alle mie aspettative.Come testare le query dei criteri di ibernazione senza utilizzare alcun database?
Ma sto cercando una soluzione più semplice, poiché i criteri di Hibernate sono solo un tipo speciale di predicati logici sugli oggetti Java. In teoria, quindi, potrebbero essere testati senza accedere a nessun database. Per esempio, supponendo che ci sia un'entità chiamata Cat
:
class Cat {
Cat(String name, Integer age){
this.name = name;
this.age = age;
}
...
}
Vorrei fare qualcosa di simile, per creare criteri di query:
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)))
I criteri potrebbero essere utilizzati nel codice di produzione come questo :
C'è qualche libreria Java che rende possibile questo tipo di test?
Grazie per la risposta! Ma, come fai notare, questo tipo di test verifica come la classe è * implementata *, non come dovrebbe * comportarsi *. Inoltre, questo test è focalizzato su un altro servizio, che capita di utilizzare i criteri. Sebbene questa sia certamente una parte importante della funzionalità, dovrebbe essere relativamente facile da testare (separando le classi con il giusto uso di interfacce, separazione delle responsabilità, ecc.). Qui, sono più interessato a testare l'oggetto Criteria stesso. –