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



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

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

["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"]]

最新更新