我遇到了一个特定条件的问题。我正在显示json中的值,正如您在屏幕截图中看到的那样,它会在日志中显示值2210,但是当条件应为fail
时,它会输出条件为true
。我不明白为什么会失败,是否有人有想法为什么或我可以尝试修复它以便它会通过?
以下是代码:
import groovy.json.JsonSlurper
def response = messageExchange.response.responseContent
def json = new JsonSlurper().parseText(response)
def hotelidjson = json.jet2_hotel_id
hotelid = context.expand( '${#TestCase#hotelid}' )
assert hotelidjson != null
if (hotelidjson == "2210")
log.info "pass"
else
log.info "fail"
log.info hotelidjson
更新:
响应字符串输出:
INFO:[{jet2Awards=[], awards=[{awardType=Certificate of Excellence, images={small=https://www.tripadvisor.com/img/cdsi/img2/awards/CERTIFICATE_OF_EXCELLENCE_small-24283-5.jpg, large=https://www.tripadvisor.com/img/cdsi/img2/awards/CERTIFICATE_OF_EXCELLENCE_2016_en_US_large-24283-5.jpg}, year=2016}], num_reviews=342, rating_image_url=https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.5-24283-5.png, jet2_hotel_id=2210, rating=4.5}]
响应的json在这里:
[{
"rating": "4.5",
"rating_image_url": "https://www.tripadvisor.com/img/cdsi/img2/ratings/traveler/4.5-24283-5.png",
"num_reviews": 342,
"jet2_hotel_id": 2210,
"awards": [ {
"awardType": "Certificate of Excellence",
"year": "2016",
"images": {
"small": "https://www.tripadvisor.com/img/cdsi/img2/awards/CERTIFICATE_OF_EXCELLENCE_small-24283-5.jpg",
"large": "https://www.tripadvisor.com/img/cdsi/img2/awards/CERTIFICATE_OF_EXCELLENCE_2016_en_US_large-24283-5.jpg"
}
}],
谢谢
答案 0 :(得分:0)
您正在测试"2210"
,但hotelidjson.toString()
为"[2210]"
,因此该对象绝对不是字符串"2210"
。
实际上是什么,更难说。对于程序员尖叫而言,这是一个普遍的问题,而println()
表示他们是相同的,但是assertEquals()
说他们不是&#34;在他们的IDE。但请考虑将List<String>
打包为"Hello"
打印为["Hello"]
,字符串"[\"Hello\"]"
也打印为["Hello"]
。
此外,此类的对象打印为["Hello"]
:
class Hello {
String toString() {
"[\"Hello\"]"
}
}
因此,在假设两个提供相同println()
输出的对象实际上相等之前,您需要更加彻底。
最明智的做法是在调试器中运行测试。在断言之前放置一个断点,在那一点检查变量。
一个dumber选项,但如果你还不是一个习惯性的调试器用户,那么设置开销会减少,就是增加一些诊断日志记录。例如,log.info hotelidjson.getClass()
但我完全建议养成使用调试器的习惯。它很快就能在数小时的时间里回报这一努力。
更新,现在您已经显示了JSON。我希望hotelidjson == 2210
能够通过。 2210
和"2210"
不相等,因为一个是数字,另一个是字符串。
(我注意到在评论中你发现它是一个列表。我不知道为什么会这样。)
答案 1 :(得分:-1)
由于hotelidjson
实际上是一个列表而不是字符串([2210]
是列表的字符串表示形式),因此直接将其与字符串进行比较将始终返回false。你可以这样做:
if (hotelidjson == [2210])
或
if (hotelidjson[0] == 2210)
小心使用def
你应该。
PS:感谢苗条的提示;)