Unit testing 服务类的Grails单元测试中的params数据绑定
我有一个服务方法,它将params作为输入,并创建一个域类,传入params进行自动绑定。通过将参数指定为键值对的映射,这方面的测试很简单。但是,我不知道如何在params映射中模拟关联对象的数组 我观察到客户端以以下格式发送参数:Unit testing 服务类的Grails单元测试中的params数据绑定,unit-testing,grails,Unit Testing,Grails,我有一个服务方法,它将params作为输入,并创建一个域类,传入params进行自动绑定。通过将参数指定为键值对的映射,这方面的测试很简单。但是,我不知道如何在params映射中模拟关联对象的数组 我观察到客户端以以下格式发送参数: ["description":"abc", "subTask[0].name": "first subtask name"] 如何模拟这种类型的参数?因为这不是控制器测试,所以我不能使用mockParams AFAIK。Grails中的参数映射使用包含点的参数名
["description":"abc", "subTask[0].name": "first subtask name"]
如何模拟这种类型的参数?因为这不是控制器测试,所以我不能使用mockParams AFAIK。Grails中的参数映射使用包含点的参数名称,使它们在控制器中作为“子映射”可用。例如,如果您有参数a.b=1和a.c=2,您可以请求
params.a
并获得映射[b:1,c:2]
。因此,请尝试以下方法:
["description":"abc", "subTask[0]":["name": "first subtask name"]]
答案是这样的: 由于控制器参数映射解析在服务类中不可用,因此必须自己转换值和对象。因此,在我的示例中,我必须在params映射中手动创建关联对象的数组。以下是一个例子:
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)
希望这对其他人有所帮助。您是遇到了一个错误,还是只是没有创建数组?遇到了一个错误,抱怨“subTask[0].name”不是有效的属性。通常情况下,数据绑定类会将其转换为关联的对象属性,但在单元测试中似乎不会发生这种情况。单元测试的行为不应该有所不同。是否使用构造函数args(new Foo(mockParams))传入映射?否,mockParams在GrailsUnitTestCase与ControllerUnitTestCase中不可用