有具有自定義靜態函數從數據庫中如何在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