Использование Junit assert для массива элементов json не работает для первого элемента

Я пытаюсь использовать Katalon Studio для автоматизации некоторых веб-сервисов. Я следил за этим руководством о том, как анализировать возвращенное тело Json с помощью jsonslurper. https://docs.katalon.com/katalon-studio/tutorials/parse_json_responses.html Все работает нормально, как описано в руководстве. Я хотел посмотреть, могу ли я использовать утверждения junit, в частности, assertEquals() для лучшего текста ошибки. Учитывая, что у нас есть это

import groovy.json.JsonSlurper

String jsonString = {"menu": {
"id": "file",
"tools": {
"actions": [
{"id": "new", "title": "New File"},
{"id": "open", "title": "Open File"},
{"id": "close", "title": "Close File"}
],
"errors": []
}}}
JsonSlurper slurper = new JsonSlurper()
Map parsedJson = slurper.parseText(jsonString)

def array1 = parsedJson.menu.tools.actions

String onlickValue1 = ""

for(def member : array1) {
assertEquals("Open File", member.title)
break
}

У меня проблемы с тем, что мое утверждение выдает ошибку при сравнении самого первого элемента заголовка, с которым он сталкивается (то есть «Новый файл»).

Я намереваюсь перебрать все элементы в массиве и утвердить ожидаемое значение для всех из них. Если мое ожидаемое значение не существует, я потерплю неудачу.

Я чувствую, что что-то упускаю, потому что мы делали что-то подобное в прошлом с java, но я просто не вижу этого здесь.


person Bratok17    schedule 31.05.2019    source источник
comment
Какие ошибки вы получаете при запуске этого кода? Тройных кавычек в конце фрагмента кода быть не должно. И синтаксический анализ json выглядит не так.   -  person Mate Mrše    schedule 10.06.2019
comment
Извините, тройные кавычки были моей попыткой стилизовать код, когда я писал сообщение. Сообщение об ошибке, которое я получаю, заключается в том, что мое утверждение не выполняется для самого первого элемента title в массиве действий. Теперь я понимаю, что это связано с моей путаницей логики в моем коде (использовал цикл for.each для сравнения каждого элемента в массиве, и он неправильно работал). Я закрою этот вопрос и спрошу, что я пытаюсь решить по-другому.   -  person Bratok17    schedule 10.06.2019


Ответы (1)


Так что я понял, что проблема была в моей неопытности/невежестве. При поиске решений в Интернете я не смог с абсолютной уверенностью понять, что делает код, который я пытаюсь реализовать. Я использовал цикл for.each для утверждения элементов в массиве в соответствии с моим ожидаемым значением. Что, конечно же, не срабатывало, правильно, для каждого элемента, который не соответствовал моему ожидаемому значению. Поэтому я заставил его работать, добавив оператор if, как показано ниже:

String expectedValue = ''
for(def member : array1) {
if (member.title=="Open File")
{
expectedValue = member.title
}
break
}
assertEquals("Open File", member.title)

Также я обнаружил более простой способ использовать assertJ следующим образом assertThat(member).contains("Open File")

Я понимаю, что есть лучшие решения для достижения того, что я пытаюсь сделать. Но для целей этого вопроса я считал его решенным.

person Bratok17    schedule 10.06.2019