Работа с массивами с хамкрестом и будьте уверены

Я не могу понять, как создать код с помощью hamcrest для проверки массива внутри массива, имеющего эти свойства.

(Представьте, что у него есть несколько записей с разными данными)

 {
        "mobilenum": "+6519829340",
        "firstname": "Allen",
        "lastname": "Edwards",
        "location": "Singapore"
    }

Если я использую это:

 .body("smsentries.mobilenum", contains(equalTo("+6519829340")));

он возвращает, что он существует, но как я могу поставить дополнительные проверки того, что найденный объект также имеет то же имя, фамилию и местоположение?

Я тоже считаю, что это неправильно:

 .body("smsentries.mobilenum", contains(equalTo("+6519829340")))
      .and()
 .body("smsentries.firstname", contains(equalTo("Allen"));

Насколько я понимаю, он выполняет поиск в массиве, если массив содержит значение mobilenum, равное предоставленному, и если массив содержит имя "Allen"

Мне нужно было найти массив с номером mobilenum, равным «+6519829340», и с именем, равным «Allen».

Вы, ребята, и девчонки знаете, как с этим справиться?


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


Ответы (1)


Мне нужно было найти массив с номером mobilenum, равным «+6519829340», и с именем, равным «Allen».

Вы можете воспользоваться методом "поиска":

.body("smsentries.find { it.mobilenum == '+6519829340' }.firstname", equalTo("Allen")
.body("smsentries.find { it.mobilenum == '+6519829340' }.lastname", equalTo("Edwards").

Как видите, вы по существу дублируете выражение пути в двух случаях, поэтому для улучшения этого мы можем использовать корневые пути:

.root("smsentries.find { it.mobilenum == '+6519829340' }").    
.body("firstname", equalTo("Allen")
.body("lastname", equalTo("Edwards").

Вы также можете параметризовать корневые пути:

.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").
person Johan    schedule 06.06.2015
comment
Привет, Йохан! Спасибо! Но у меня есть еще одна проблема. Каким будет синтаксис, если имя равно x, а фамилия равна y, тогда число должно быть z. Другой пример из приведенных выше данных, он имеет те же данные, за исключением поля. Как комбинировать условия? - person Francis Zabala; 08.06.2015
comment
Я думаю, вам следует создать для этого новый вопрос и пометить его как ответ. Я также могу ответить на новые вопросы, если вы оставите здесь комментарий (со ссылкой на новый вопрос). - person Johan; 08.06.2015
comment
Я полагаю, вы правы. Вот новая ссылка на мой вопрос: stackoverflow.com/questions/30706158/ Спасибо! - person Francis Zabala; 08.06.2015
comment
Что такое it (it.mobilenum)? Параметр по состоянию на JsonPath.param? Но тогда как получить ValidatableResponse от JsonPath? - person user3748908; 09.02.2016