0

我在我的 JUnit 测试中将保存的示例 xml 与实时编组的 xml 进行比较。验证 xml 中是否存在键值对。

我正在专门使用XmlUnit 2.1.0

我的xml如下:

<entries>
        <entry>
            <key>delete</key>
            <value>ENABLED</value>
        </entry>
        <entry>
            <key>view</key>
            <value>DISABLED</value>
        </entry>
        <entry>
            <key>create</key>
            <value>DISABLED</value>
        </entry>
    </entries>

条目的顺序可能会有所不同。我不确定如何让它正确验证,因为即使它只是订单更改,它也会将不同的键值视为 xml 中的差异。

我断言与 JUnit 中的以下断言相似:

 assertThat(marshalledXml, isSimilarTo(Input.fromFile("path/to/example.xml").ignoreWhitespace().ignoreComments());

我怀疑我可能需要使用 XPath 匹配器或带有 ElementSelector 的 DefaultNodeMatchers。

4

1 回答 1

1

是的,您需要提供一个ElementSelector“知道”在您的特定情况下选择哪些节点进行比较。

对于大多数文档,元素的名称似乎是您应该使用的。至少对于entries和是key这样value。对于entry要比较那些元素的key元素,在它们的直接子元素中具有匹配的嵌套文本,对吧?

我认为这可以转化为

ElementSelectors.conditionalBuilder()
    .whenElementIsNamed("entry")
    .thenUse(ElementSelectors.byXPath("./key", ElementSelectors.byNameAndText))
    .elseUse(ElementSelectors.byName)
    .build();

有关选项的更详细讨论,请参阅https://github.com/xmlunit/user-guide/wiki/SelectingNodesElementSelector。您的 XML 非常接近table介绍中使用的示例,并将在下一节中讨论。

于 2016-04-04T20:09:05.313 回答