使用XMLSlurper从RESTClient查找XML元素

我正在编写一个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将为null(因为没有带有该id的模板; expresion println it。@ id == newUserTemplateId总是打印false,在这种情况下newUserTemplateId的值是1171)。 但是,delTemplate的类型为groovy.util.slurpersupport.NoChildren,它似乎包含userTemplate元素。 有趣的是,如果我用与文本相同的XML编写快速脚本(与从REST中读取它相反),
res.userTemplate.find { it.@id == 1171 }
按预期返回null。 我做错了什么,或者我怎么能解决这个问题?     
已邀请:
我使用带有XMLSlurper的httpBuilder进行其余web服务的JUnit测试。有一个问题是,GPathResult上的find()总是返回另一个GPathResult - 但是这可能不包含子节点。 对于您的特定用例,我使用的习语是:
def resp = settingsService.get(path: 'templates')
assert resp.success
assert resp.data.userTemplate.find {it.@id == newUserTemplateId}.isEmpty()
    

要回复问题请先登录注册