在元素的json数组上使用Junit断言在第一个元素上失败

时间:2019-05-31 20:27:04

标签: arraylist junit assert katalon-studio jsonslurper

我正在尝试使用Katalon Studio进行一些Web服务自动化。我一直在遵循本指南,了解如何使用jsonslurper解析返回的Json主体。 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做过类似的事情,但是我在这里看不到它。

1 个答案:

答案 0 :(得分: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")

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