Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 服务类的Grails单元测试中的params数据绑定_Unit Testing_Grails - Fatal编程技术网

Unit testing 服务类的Grails单元测试中的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中的参数映射使用包含点的参数名

我有一个服务方法,它将params作为输入,并创建一个域类,传入params进行自动绑定。通过将参数指定为键值对的映射,这方面的测试很简单。但是,我不知道如何在params映射中模拟关联对象的数组

我观察到客户端以以下格式发送参数:

["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中不可用