我有一个服务方法,该方法将参数作为输入,并创建一个传入参数以进行自动绑定的域类。通过将参数指定为键值对的映射,对此进行测试很简单。但是,我不知道如何在参数映射中模拟关联对象的数组。
我观察到客户端以以下格式发送参数:
["description":"abc", "subTask[0].name": "first subtask name"]
如何模拟这种类型的参数?由于这不是控制器测试,因此我无法使用模拟参数AFAIK。
答案是这样的:由于控制器参数映射解析在服务类中不可用,因此您必须自行转换值和对象。因此,在我的示例中,我必须在参数映射中手动创建关联对象的数组。下面是一个示例:
def params = [ state: "Open", type: "Cable",
needByDate: new Date("Fri May 11 00:00:00 PDT 2012"),
//"subTasks[0]":["name":"ABC"] //no workie
"subTasks": [new Task("name": "ABC")]
]
mockDomain(Task.class)
Task task= service.saveNewRequest(params)
希望这对某人有所帮助。
Grails 中的参数映射使用包含点的参数名称执行神奇操作,使它们在控制器中作为"子映射"可用。 例如,如果您有参数 a.b=1 和 a.c=2,您可以请求params.a
并获取地图[b:1, c:2]
。 所以试试这样的事情:
["description":"abc", "subTask[0]":["name": "first subtask name"]]