10

XMLUnit 2 では、要素の順序を考慮せずに 2 つのドキュメントを比較するにはどうすればよいでしょうか?

XMLUnit 1 についてこの質問を受けましたが、どうやら v2 の新しい API には前述のメソッドがありません。

これは私の現在のコードです:

Diff diff = DiffBuilder.compare(expected)
            .withTest(actual)
            .ignoreComments()
            .ignoreWhitespace()
            .checkForSimilar()
            .build();

assertFalse(diff.hasDifferences());

Stefan Bodewigs のコメントを編集します。

これらは、上記のスニペットと比較する 2 つの文字列です。

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)
4

1 に答える 1

13

2.x のドキュメントで明確にする必要があるかもしれない 1 つの違いは、デフォルトです。これは、ElementSelectorおおよそElementQualifier1.x で使用されていたものです。1.x はデフォルトで要素を名前で照合しますが、2.x はデフォルトで要素を順番に照合します。多分これは悪い考えです。

要素名のマッチングに切り替えると、Diff が機能するはずです。

.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))

于 2015-11-17T05:32:40.480 に答える