簡體   English   中英

Grails-如何-使用控制器中的參數的單元測試服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM