我想单元测试服务方法,它需要参数日期和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是否应该以一种特殊的方式被嘲弄/残留?
感谢