有具有自定义静态函数从数据库中如何在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()
建立从符表中提取数据的查询,这意味着抓住数据的Grails域对象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
,但我无法让它工作。
编辑:
每次我试图嘲弄了这一点,我试图嘲弄它是这样的...
Foo.metaClass.'static'.findByCustomCriteria = { someParam, anotherParam ->
["one": "uno", "two": "due", "three": "tre"]
}
我想我起初并没有包括足够的信息。
把嘲笑和foo的东西放在......这就是我们需要看到的帮助 – hvgotcodes 2010-10-30 00:13:58