在 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")
我知道有更好的解决方案可以实现我想要做的事情。但是出于这个问题的目的,我认为它已经解决了。
我正在尝试使用 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")
我知道有更好的解决方案可以实现我想要做的事情。但是出于这个问题的目的,我认为它已经解决了。