带有Hamcrest和RestAssured的重复项的JSON数组

时间:2015-06-08 09:57:42

标签: hamcrest rest-assured

作为Dealing arrays with hamcrest and rest assured

中我的问题的后续问题

如何使用放心的hamcrest以便我可以测试

{
    "mobilenum": "+6519829340",
    "firstname": "Allen",
    "lastname": "Edwards",
    "location": "Singapore"
    "outbound": "YES"
    "count" : 15
}, 
{
    "mobilenum": "+6519829340",
    "firstname": "Allen",
    "lastname": "Edwards",
    "location": "Singapore"
    "outbound": "NO"
    "count" : 9
}

存在两种类型的数据,一种包含mobilenum,firstname等,其出站等于是,另一种不是。

除了出站属性之外,有两个对象具有相同的属性。

约翰的回答,上一个问题是:

 .root("smsentries.find { it.mobilenum == '%s' }").    
 .body("firstname", withArgs("+6519829340"), equalTo("Allen")
 .body("lastname", withArgs("+6519829340"), equalTo("Edwards").
 .body("firstname", withArgs("+12345678"), equalTo("John")
 .body("lastname", withArgs("+12345678"), equalTo("Doe").

我不知道如何添加类似withArgs(“Allen”)和(“Edwards”.equalTo(“outbound”)

的内容

更新

我希望发生的事情是这样的:

 for (Map.Entry<String,JsonElement> entry : o.entrySet()) {
        if (entry.getKey().equals("smsentries")) {
        JsonArray array = entry.getValue().getAsJsonArray();
        for (JsonElement elementJSON : array) {
            SMSEntry smsEntry = mapper.readValue(elementJSON.toString(), SMSEntry.class);
                if (smsEntry.getMobilenum().equals("+6519829340") && 
                        smsEntry.getOutbound().equals("YES")) {
                            assertThat(smsEntry.getLocation(), equalTo("Singapore"));
                            assertThat(smsEntry.getCount(), equalTo(15));
                        }
            }
        }
    }

如果我的手机号码等于+6519829340并且是出站号码,则声明该号码位于新加坡且数量为15。

1 个答案:

答案 0 :(得分:2)

如果我理解正确(并且用户列表(?)被称为smsentries,就像上一个问题一样),你可以这样做:

.root("smsentries.findAll { it.mobilenum == '%s' }").    
.body("firstname", withArgs("+6519829340"), contains("Allen", "Allen"))
.body("lastname", withArgs("+6519829340"), contains("Edwards", "Edwards"))
.body("outbound", withArgs("+6519829340"), containsInAnyOrder("YES", "NO"))
// Additional body matchers

澄清后更新

  

如果我的手机号码等于+6519829340并且是出站号码,请断言   该地点位于新加坡,数量为15个。

你可以这样做:

.root("smsentries.find { it.mobilenum == '+6519829340' && it.outbound == 'YES'}").    
.body("location", equalTo("Singapore"))
.body("count", equalTo(9))