имеет объект домена 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"]
*/
}
}
Статическая функция findByCustomCriteria
использует createCriteria()
для построения запроса, извлекающего данные из таблицы Foo, что означает, что mockDomain(Foo)
не работает должным образом при модульном тестировании. То, что я пытаюсь сделать, чтобы обойти это, - это использовать один из универсальных методов насмешки для макетирования findByCustomCriteria
, но я не могу понять синтаксис совершенно правильно.
У меня есть контроллер BarController
, который я пытаюсь проверить, и похоронен в вызове на BarController.someFunction()
, есть вызов на 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())
}
}
Как бы это можно было смутить?
Я пытался использовать new MockFor()
, mockFor()
и metaClass
, но не могу заставить его работать.
Edit:
Каждый раз, когда я пытался издеваться над этим, я пытался издеваться над этим так ...
Foo.metaClass.'static'.findByCustomCriteria = { someParam, anotherParam ->
["one": "uno", "two": "due", "three": "tre"]
}
Полагаю, я изначально не включил достаточно информации.