【问题标题】:XmlUnit order based on value [duplicate]基于值的 XmlUnit 顺序 [重复]
【发布时间】:2016-04-04 16:29:41
【问题描述】:

在我的 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。

【问题讨论】:

标签: java xml xpath junit xmlunit


【解决方案1】:

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

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

我认为这可以转化为

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

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

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2018-08-16
    相关资源
    最近更新 更多