params服务类的Grails单元测试中的数据绑定

时间:2012-05-30 01:09:47

标签: unit-testing grails

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

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

["description":"abc",  "subTask[0].name": "first subtask name"]

我如何模仿这种类型的参数?由于这不是控制器测试,我不能使用mockParams AFAIK。

2 个答案:

答案 0 :(得分:1)

答案结果是这样的: 由于控制器参数映射解析在Service类中不可用,因此您必须自己转换值和对象。所以在我的例子中,我必须在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)

希望这有助于某人。

答案 1 :(得分:0)

Grails中的params地图使用包含点的参数名称来制作神奇的东西,使它们在控制器中可用作“子地图”。例如,如果您有参数a.b = 1和a.c = 2,则可以请求params.a并获取地图[b:1, c:2]。所以尝试这样的事情:

["description":"abc",  "subTask[0]":["name": "first subtask name"]]