我对柑橘验证匹配器的正确使用有疑问。在官方XML示例中,为getTodoListResponse
定义了以下XSD架构(TodoList.xsd):
<xs:element name="getTodoListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="list">
<xs:complexType>
<xs:sequence>
<xs:element name="todoEntry" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="attachment" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="cid" type="xs:string"/>
<xs:element name="contentType" type="xs:string"/>
<xs:element name="data" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="done" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
定义的验证匹配器如下所示(templates/getTodoListResponse.xml):
<todo:getTodoListResponse xmlns:todo="http://citrusframework.org/samples/todolist">
<todo:list>
<todo:todoEntry>
<todo:id>@ignore@</todo:id>
<todo:title>${todoName}</todo:title>
<todo:description>${todoDescription}</todo:description>
</todo:todoEntry>
</todo:list>
</todo:getTodoListResponse>
但是当通过mvn verify
多次运行测试时,生成的XML中有多个todoEntry元素。为了检查结果中返回的XML元素的变量列表。因此检查将失败。
问题是,如果有办法通过XML验证匹配器API表达此动态列表。
我有一个基于groovy验证器的工作解决方案,如下所示:
assert root.list.children().size() > 1
(getTodoListResponseValidator.groovy)
但我更愿意看到这一点通过XML验证。似乎有类似的名为@matchesXml(),但是从文档中我不清楚这是否适合所描述的用例。
提前谢谢。再见 马里奥