Массивы JSON с повторяющимися элементами с Hamcrest и RestAssured

В качестве дополнительного вопроса к моему вопросу в Работа с массивами с помощью hamcrest и будьте уверены

Как я могу использовать 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
}

Что существует два типа данных, один из которых содержит номер мобильного телефона, имя и т. д., имеющий исходящее значение «да», а другой — «нет».

Это было бы похоже на наличие двух объектов с одинаковыми свойствами, кроме исходящего свойства.

Ответ Джона на предыдущий вопрос таков:

 .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.


person Francis Zabala    schedule 08.06.2015    source источник


Ответы (1)


Если я вас правильно понял (и что список пользователей (?) называется 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))
person Johan    schedule 08.06.2015
comment
Привет, Йохан, я думаю, что понимаю, что вы пытаетесь сделать, но, возможно, мне не удалось дать более краткое описание моей проблемы. Я добавил новое поле в свой json, чтобы сделать его более понятным. - person Francis Zabala; 09.06.2015
comment
Я только что попробовал код, и мне пришлось добавить круглые скобки к каждому условию: Это нормально? - person Francis Zabala; 10.06.2015
comment
Нет, вам не нужно использовать скобки. - person Johan; 10.06.2015