我想單元測試服務方法,它需要參數日期和params LinkedHashMap從控制器。設置如下:Grails - 如何 - 單元測試使用來自控制器的params的服務
def save = {CustomCommandObject erc ->
...
if (erc.conditionProperty != null) {
def result = myService.ServiceMethod(someDate, params)
...
}
....
redirect(controller: 'controllerName', action: 'actionName', id: params.id)
}
class MyService {
static transactional = false
....
def TypeToReturn ServiceMethod(Date someDate, def params){
...
TypeToReturn typeToReturn = new TypeToReturn(params)
return typeToReturn
}
....
}
其中關於GSP視圖標籤的類型爲<喬達:timerPicker>:
和TypeToReturn有一個屬性:
LocalTime propertyName
當應用程序在瀏覽器中正常運行時,params映射會正確傳遞到服務方法並且新的TypeToReturn(params)創建一個實例TypeToReturn。 PARAMS包含以下內容:
{[email protected]} propertyName_hour -> 20
{[email protected]} propertyName_minute -> 30
{[email protected]} propertyName -> struct
因此,在我的測試服務方法,我有以下:
void testSomething() {
LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
params.put("propertyName","struct")
params.put("propertyName_hour", "20")
params.put("propertyName_minutes", "30")
myService = new MyService()
Date d = new Date()
myService.ServiceMethod(d,params)
}
然而當我嘗試和運行測試,我得到以下錯誤:
org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'struct' with class 'java.lang.String' to class
'org.joda.time.LocalTime'
如果我ommit params.put( 「PROPERTYNAME」, 「結構」) FR OM地圖完全然後再它(正確)錯誤說TypeToReturn不具有財產propertyName_hour
因此如何,我應該是單元測試,以便使用從控制器PARAMS地圖服務的方法?在測試中重新創建地圖似乎不起作用。 Params Map是否應該以一種特殊的方式被嘲弄/殘留?
感謝