【发布时间】:2011-07-20 18:40:12
【问题描述】:
在我的一个单元测试中,我在执行模拟方法时遇到了一些困难。我有以下测试代码:
void testExample() {
def mockICFService = new MockFor(ICFService)
...
//Mock the methods
controller.metaClass.icfList = { def person ->
println "icfList"
return [new IC(conceptId:'12345')]
}
mockICFService.demand.getAllIC(1..1) { def id, def withHist, def appId ->
println "mocking service"
return new Person()
}
...
def model = controller.detail()
}
在我的控制器类中,我通过 ICFService 的 getAllIC() 创建了一个 Person。这部分工作正常。然而,在函数的后面,有一个对 icfList 的调用(在控制器中定义)。通过 println,我确定调用仍在进行中,尽管它返回一个空数组。我相信这是因为数组是根据 servletContext 中的数据填充的,但在单元测试中无法访问它(因此我试图模拟它)。
有谁知道如何强制测试使用 controller.icfList 的模拟版本,而不是调用控制器中的实际方法?
【问题讨论】:
标签: unit-testing grails controller mocking