我有一个脚本断言,应该只检查响应中的每个项目,并检查每个项目是否是正确的数据类型。 我注意到当响应为空时,每个循环似乎都没有运行,因此断言在不应该的地方传递。
规则ID是响应中的字段,但是当请求条件与任何交易不匹配时,它将返回一个空数组。
这是每个循环的正确行为吗?如果是这样,最好的循环是什么?
以下代码并提前致谢
添加了这个Groovy代码段
import groovy.json.JsonSlurper
def slurper = new JsonSlurper()
def response = context.expand( '${POST/instant-deal/get-applicable-request#Response}' ).toString()
def jsonRes = slurper.parseText(response)
RuleId = jsonRes.RuleId
RuleId.each { RuleID ->
log.error "Rule IDs: " + RuleID
assert RuleID != null
assert RuleID instanceof Integer
}
答案 0 :(得分:1)
是的,围绕空列表的循环将立即退出。
您正在执行以下操作:
def expected = [1,2,3]
def actual = myMethod() // returns a list of int
actual.each { x ->
assert expected.contains(x)
}
正如您所指出的那样,actual == []
或[1]
或[1,3]
或[3,2,1]
的传递 - 它所说的是什么,& #34;我不需要任何内容actual
,但 中的任何内容都必须是expected
的成员。
如果您希望确保expected
中的每个成员都在actual
,那么您应该绕expected
代替:
expected.each { x ->
assert actual.contains(x)
}
这会检查expected
中是否存在actual
的每个成员,但如果actual
包含更多成员,则不会介意。因此,[1,2,3]
,[3,2,1]
以及[1,2,3,3]
或[1,2,3,4]
也会传递 - 这可能就是您所需要的。
如果要检查列表是否完全相同,只需使用actual == expected
(在Groovy中...在Java中,您需要使用.equals()
)
你应该做什么,取决于你想要断言的确切内容。目前,您所描述的内容:"检查响应中的每个项目,并检查每个项目是否是正确的数据类型。" 应该传递一个空列表,因为列表中的每个项目(即无)都具有正确的类型。
答案 1 :(得分:0)
如果空的RuleId无效,则添加:
...
RuleId = jsonRes.RuleId
assert RuleId
...