【发布时间】:2011-05-02 16:22:18
【问题描述】:
拥有一个 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,但无法使用。
编辑:
每次我试图模拟它时,我都试图像这样模拟它......
Foo.metaClass.'static'.findByCustomCriteria = { someParam, anotherParam ->
["one": "uno", "two": "due", "three": "tre"]
}
我想我最初没有提供足够的信息。
【问题讨论】:
-
把 mocking 和 foo 的东西放进去......这就是我们需要看到的帮助
标签: unit-testing grails groovy mocking