2015-11-13 42 views
6

XMLUnit 2要素の順序を考慮せずに2つの文書を比較するにはどうすればよいですか?要素順序を無視するXMLの比較

私はthis question for XMLUnit 1を取得しましたが、明らかにv2の新しいAPIには上記の方法がありません。

String expected = "<root><foo>FOO</foo><bar>BAR</bar></root>"; 
String actual = "<root><bar>BAR</bar><foo>FOO</foo></root>"; 

報告差分

:これらは、私は上記のスニペットと比較二つの文字列です

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

assertFalse(diff.hasDifferences()); 

編集ステファンBodewigsコメントへ:

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

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) 
+0

新しいAPIは、デフォルトでは要素の順序(これは 'DifferenceEvaluators.DEFAULT'が何をするかである)を無視すべきです。これはあなたが見る違いで、他のものではないと確信していますか? –

+0

.checkForSimilar()を追加してもOPの問題が再現されました。これは、https://github.com/xmlunit/user-guide/wiki/DifferenceEvaluator#default-differenceevaluatorのドキュメントに反するようです。 下記の.withNodeMatcher()を追加することで問題は解決しました。 –

答えて

8

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

要素名の照合に切り替えると、差異が機能します。

.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))

+0

ありがとう、Stefan! –

関連する問題