【发布时间】:2023-03-21 14:38:01
【问题描述】:
使用 XMLUnit 2 如何在不考虑元素顺序的情况下比较两个文档?
我收到了this question for XMLUnit 1,但显然 v2 中的新 API 不再具有上述方法。
这是我当前的代码:
Diff diff = DiffBuilder.compare(expected)
.withTest(actual)
.ignoreComments()
.ignoreWhitespace()
.checkForSimilar()
.build();
assertFalse(diff.hasDifferences());
编辑 Stefan Bodewigs 评论:
这是我与上面的 sn-p 比较的两个字符串:
String expected = "<root><foo>FOO</foo><bar>BAR</bar></root>";
String actual = "<root><bar>BAR</bar><foo>FOO</foo></root>";
报告的差异
Expected element tag name 'foo' but was 'bar' - comparing <foo...> at /root[1]/foo[1] to <bar...> at /root[1]/bar[1] (DIFFERENT)
Expected text value 'FOO' but was 'BAR' - comparing <foo ...>FOO</foo> at /root[1]/foo[1]/text()[1] to <bar ...>BAR</bar> at /root[1]/bar[1]/text()[1] (DIFFERENT)
Expected element tag name 'bar' but was 'foo' - comparing <bar...> at /root[1]/bar[1] to <foo...> at /root[1]/foo[1] (DIFFERENT)
Expected text value 'BAR' but was 'FOO' - comparing <bar ...>BAR</bar> at /root[1]/bar[1]/text()[1] to <foo ...>FOO</foo> at /root[1]/foo[1]/text()[1] (DIFFERENT)
【问题讨论】:
-
默认情况下,新 API 应该忽略元素顺序(这是
DifferenceEvaluators.DEFAULT所做的)。您确定这是您看到的差异,而不是其他任何东西吗? -
我复制了 OP 的问题,即使我添加了 .checkForSimilar()。这似乎与github.com/xmlunit/user-guide/wiki/… 的文档相反,添加下面描述的 .withNodeMatcher() 解决了问题。
标签: xml diff xmlunit xmlunit-2