2010-05-24 13 views
7

Me gustaría probar un cierre "con Criteria" y no estoy seguro de cómo hacerlo. Veo cómo simular la llamada aCriteria, pero no probar el código dentro del cierre. Cuando ejecuto la prueba que ejecuta el "withCriteria", sigo obteniendo una MissingMethodException, aunque el código funciona bien bajo el flujo normal de ejecución. ¿Algunas ideas? Gracias! SteveGrails withCriteria testing

Respuesta

14

No iría por esa ruta. En cambio, movería la consulta a la clase de dominio como un método de búsqueda estático y lo probaría directamente en una prueba de integración con datos reales. Luego puede simular fácilmente el método de ayuda cuando se lo llama en un controlador o prueba de servicio.

class YourDomainClass { 

... 
    static List<YourDomainClass> findFooBar() { 
     YourDomainClass.withCriteria { 
     ... 
     } 
    } 
} 

Luego, en una prueba de unidad:

def results = [instance1, instance2, instance3] 
YourDomainClass.metaClass.static.findFooBar = { -> results } 

De esta manera se prueba que la consulta va en contra de la base de datos en memoria en una prueba de integración, pero es fácil burlarse de él en las pruebas unitarias.

0

No existe una implementación simulada para los criterios de Hibernate en este momento. Tendrá que usar pruebas de integración. Sin embargo, la recomendación de Burt de hacer de este un método de búsqueda estático es bueno para la organización del código. También debe consultar las consultas con nombre, descritas en http://www.grails.org/1.2+Release+Notes, para obtener una sintaxis agradable para esto.

1

con la respuesta de Burt, echa un vistazo a consultas con nombre como se describe aquí:

http://blog.springsource.com/2010/05/24/more-grails-1-3-features/

Luego, puede burlarse de la propiedad/método de acceso en las pruebas unitarias como se describe por Burt.

+3

Las consultas con nombre son grandes, pero no fue capaz de burlarse de ellos en las pruebas unitarias. ¿Lo hiciste funcionar o te pegaste a las pruebas de integración? – j4y

1

Dado que nadie mencionó la opción de crear una DSL para ejecutar otras DSL aquí hay una divulgación completa de este método. Lo uso bastante a menudo con muy buenos resultados.

Groovy/Grails testing DSLs