![](/img/trans.png)
[英]Grails - How to unit test a service that uses a simple HTTP utility function?
[英]Grails - How to - Unit test Service that uses params from controller
我正在嘗試對服務方法進行單元測試,該服務方法將日期和控制器中的參數 LinkedHashMap作為參數。 設置如下:
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視圖上的標記之一是<joda:timerPicker>類型:
並且TypeToReturn具有一個屬性:
LocalTime propertyName
當應用程序在瀏覽器中正常運行時,參數映射將正確傳遞給服務方法, 新的TypeToReturn(params)創建一個TypeToReturn實例。 參數包含以下內容:
{java.util.LinkedHashMap$Entry@xxxxx} propertyName_hour -> 20
{java.util.LinkedHashMap$Entry@xxxxx} propertyName_minute -> 30
{java.util.LinkedHashMap$Entry@xxxxx} 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'
如果我完全從地圖上省略了params.put(“ propertyName”,“ struct”) ,則再次(正確)錯誤提示TypeToReturn沒有屬性propertyName_hour
因此,我應該如何對使用控制器中的params Map的服務方法進行單元測試? 僅在測試中重新創建地圖似乎不起作用。 應該以特殊方式對參數Map進行模擬/插入嗎?
謝謝
您是將測試作為單元測試還是作為集成測試運行? 如果尚不存在,請嘗試將其移至測試/集成並使用
grails test-app integration:
它將在Grails環境中運行測試,並將為joda-time插件提供機會,使其可以執行任何元編程魔術,以創建看上去像您所缺少的類型轉換為DateTime的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.