No se puede realizar una prueba unitaria con la función que tiene una instrucción createCriteria ()
-
28-10-2019 - |
Pregunta
Quiero escribir una prueba unitaria (por JUnit) para probar el valor de esta función en Groovy:
String getPeopleNamesById(int[] peopleIds) {
List<String> names = People.createCriteria().list{
projections { property("name") }
'in' ("id", peopleIds)
}
return names ? names.join(", ") : "";
}
Pero la prueba unitaria siempre falla al leer esta declaración: List Names = People.CreateCriteria (). List {...} Groovy.lang.MissingMethodException: No hay firma de método: People.CreateCriteria () es aplicable para los tipos de argumentos: () valores: []. ¿Supongo que por llamar a funciones que ejecutan algunas conexiones y consultas de DB? ¿Podría ayudarme a escribir esta prueba? ¡Muchas gracias!
Solución
Las consultas de criterios no están disponibles en las pruebas unitarias, y no se proporcionan por mockDomain
. Puede burlarse de sus criterios consultas usted mismo, por ejemplo, con mockFor
, o hacer de su prueba una prueba de integración, donde tiene acceso a un entorno de base de datos completo.
Aquí hay un ejemplo de cómo podría burlarse de su consulta:
mockFor(People).demand.static.createCriteria = { ->
[list: { closure -> [ <some mock objects> ] } ]
}