Playframework 1.3:如何模拟FunctinalTest中的重复字段?

时间:2014-08-16 01:50:26

标签: playframework playframework-1.x

我正在使用Play 1.3,我的Role模型看起来像这样:

class Role{
  // blabla
  public String name;
  @OneToMany(mappedby="role")
  public List<Resource> resources = new ArrayList<>();
}

这是我的控制者的行动:

public static void save(Role role) {
  role.save()
  ok();
}

现在我需要在其上编写一个功能测试用例:

HashMap<String, String> params = new HashMap<>();
params.put("role.name", "new role abc");
// TODO : I need to add multiple resources here   <<<----- Problem here
response = POST("/roles/save", params);
// blabla

无论如何都有解决这个问题的方法吗?我只需要向控制器发送重复的“resources.id”(它以真实浏览器的形式工作),但POST()只接受Map<String,String>

1 个答案:

答案 0 :(得分:0)

HTTP to Java binding上有一节可以帮到你:

  

POJO object binding

     

Play也会使用相同的简单命名约定规则自动绑定任何模型类。

public static void create(Client client ) {
    client.save();
    show(client);
}
     

使用此操作创建客户端的查询字符串如下所示:

?client.name=Zenexity&client.email=contact@zenexity.fr
     

Play会创建一个Client实例,并将HTTP参数名称解​​析为该属性   客户对象。未解决的参数可以安全地忽略。类型不匹配也被安全地忽略。

     

要更新模型对象列表,请使用数组表示法并引用对象的ID。例如,假设客户端模型具有声明为列表客户客户的客户模型列表。要更新Customers列表,您需要提供如下的查询字符串:

?client.customers[0].id=123
&client.customers[1].id=456
&client.customers[2].id=789

所以我会说这样的事情可以解决你的问题:

HashMap<String, String> params = new HashMap<>();
params.put("role.name", "new role abc");
params.put("role.resources[0].id", "1");
params.put("role.resources[1].id", "10"); // etc.
response = POST("/roles/save", params);
// blabla