我正在编写一个 Spock 测试,其中我有一个 REST Web 服务,它返回这样的 XML:
<templates>
<userTemplate id="1109">
<settingsXml/>
<type>USER</type>
<label>template111</label>
<description>template111</description>
</userTemplate>
<userTemplate id="1141" isAutomaticTemplate="true">
<settingsXml/>
<type>USER</type>
<label>An updated user template</label>
</userTemplate>
</templates>
我的测试想验证一个特定的 userTemplate 它不在这个文档中。因此,使用 HTTP Builder 的 REST 客户端和 XMLSlurper,我正在执行以下操作:
res = settingsService.get(path: "templates")
res.status == 200
def delTemplate = res.data.userTemplate.find {
println it.@id == newUserTemplateId
it.@id == newUserTemplateId
}
delTemplate
我会认为调用find后delTemplate会为空(因为没有具有该 id 的模板;表达式 println it.@id == newUserTemplateId 总是打印false,在这种情况下newUserTemplateId的值为 1171)。
但是,delTemplate的类型是 groovy.util.slurpersupport.NoChildren,它似乎包含一个 userTemplate 元素。
有趣的是,如果我使用与文本相同的 XML 编写一个快速脚本(反对从 REST 读取它),则按res.userTemplate.find { it.@id == 1171 }
预期返回 null。
我做错了什么,或者我该如何解决这个问题?