0
在我的一個單元測試中,我遇到了一些難以獲得模擬方法來執行。我有以下的測試代碼:模擬Grails單元測試的方法
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的模擬版本,而不是調用控制器中的實際方法?
感謝您的幫助喬丹!我確實設法通過在mockFor上使用你的建議來工作,並且對我嘲弄getICF()的方式做了一些小的改變(主要確保我在正常控制器中重寫它)。 –
很高興工作! –