Todavía no hay soporte para consultas HQL en pruebas unitarias, pero estamos trabajando en ello. Pero no deberías estar haciendo pruebas de persistencia con burlas. Las pruebas de persistencia deben hacerse contra una base de datos en una prueba de integración.
Normalmente muevo las consultas HQL a la clase de dominio como métodos de consulta estáticos. De esta forma son fáciles de simular en una prueba unitaria de un controlador, servicio, etc. y luego pruebo el método como parte de la prueba de integración de clase de dominio.
Por ejemplo Tendría
class User {
String username
String password
...
static List findAllUsersBlahBlah(String foo, boolean bar) {
executeQuery('from User u where ...')
}
}
Luego, en una prueba de unidad que puede burlarse de ese método con datos falsos, ya no me importa acerca de la persistencia en una prueba de unidad de controlador - Yo sé que es probado adecuadamente en el lugar correcto y yo quiero centrar en la clase bajo prueba, no sus colaboradores:
def users = [new User(...), new User(...)]
User.metaClass.static.findAllUsersBlahBlah = { String foo, boolean bar -> users }
Gracias, que realmente ayuda – LiCheng
Probé otras soluciones primero, pero al final tiene que usar este, gracias –
metaclassing puede causar más problemas si no limpia después de usar. fuiste advertido. –