tienen un objeto de dominio Grails que tiene una función personalizada estática para tomar los datos de la base de datos¿Cómo se burla de un método estático de un objeto de dominio en Grails?
class Foo {
/* member variables, mapping, constraints, etc. */
static findByCustomCriteria(someParameter, List listParameter) {
/* code to get stuff from the database... */
/*
Return value is a map
["one": "uno", "two": "due", "three": "tre"]
*/
}
}
La función estática findByCustomCriteria
utiliza createCriteria()
para construir la consulta que extrae datos de la tabla de Foo, lo que significa mockDomain(Foo)
no funciona correctamente cuando pruebas de la unidad. Lo que intento hacer para evitar esto es usar uno de los métodos de burla para burlarse de findByCustomCriteria
, pero no puedo entender bien la sintaxis.
Tengo un controlador BarController
que estoy tratando de probar, y enterrado en la llamada al BarController.someFunction()
hay una llamada al Foo.findByCustomCriteria()
.
class BarControllerTest extends ControllerUnitTestCase {
protected void setUp() {
super.setUp()
}
protected void tearDown() {
super.tearDown()
}
void testSomeFunction() {
/* Mocking for Foo goes here */
assertEquals("someValue", controller.someFunction())
}
}
¿Cuál sería una manera de burlarse de esto?
He intentado usar new MockFor()
, mockFor()
y metaClass
, pero no puedo hacer que funcione.
Editar:
Cada vez que trataba de burlarse de esto, me trataron de burlarse de ella como tal ...
Foo.metaClass.'static'.findByCustomCriteria = { someParam, anotherParam ->
["one": "uno", "two": "due", "three": "tre"]
}
supongo que no incluye información suficiente al principio.
pone las cosas burlonas y tontas en ... eso es lo que tenemos que ver para ayudar – hvgotcodes