Citrus中xml序列元素的验证匹配器

时间:2018-03-01 20:17:34

标签: java xml integration-testing citrus-framework

我对柑橘验证匹配器的正确使用有疑问。在官方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() > 1getTodoListResponseValidator.groovy

但我更愿意看到这一点通过XML验证。似乎有类似的名为@matchesXml(),但是从文档中我不清楚这是否适合所描述的用例。

提前谢谢。

再见 马里奥

0 个答案:

没有答案