我有一个脚本断言,应该只检查响应中的每一项,并检查每一项是否为正确的数据类型。我注意到,当响应为空时,每个循环似乎不运行,因此断言传递到不应该执行的位置。
规则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
}
发布于 2017-03-27 01:50:45
是的,一个围绕空列表的循环将立即退出。
你在做这样的事情:
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]
--它的意思是,“我不需要任何东西在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()
)
确切地说,你应该做什么,完全取决于你想要断言什么。现在,您描述的是:“点检查响应中的每一项,并检查每一项是否为正确的数据类型。”应该传递空列表,因为列表中的每一项(即无)都具有正确的类型。
发布于 2017-03-27 01:49:55
如果空RuleId无效,那么添加:
...
RuleId = jsonRes.RuleId
assert RuleId
...
https://stackoverflow.com/questions/43042806
复制相似问题