在 json 元素数组上使用 Junit assert 在第一个元素上失败

Using Junit assert on json array of elements fails on first element

我正在尝试使用 Katalon Studio 进行一些网络服务自动化。我一直在关注如何使用 jsonslurper 解析返回的 Json body 的指南。 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
}

我遇到的问题是,我的断言在比较遇到的第一个标题元素("New File")时会抛出错误。

我打算循环遍历数组中的所有元素,并针对所有元素断言我的期望值。如果我的期望值不存在,那我就失败了。

我觉得我错过了什么,因为我们在过去用 java 做过类似的事情,但我在这里看不到它。

所以我发现问题出在我的 inexperience/ignorance 上。在网上寻找解决方案时,我无法绝对确定我要实现的代码在做什么。我使用 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")

我知道有更好的解决方案可以实现我想要做的事情。但是出于这个问题的目的,我认为它已经解决了。