4

親ノードの順序が異なると問題が発生します。例えば:

サンプル XML1

<level1>
   <name>FirstParent</name>
   <level2>
        <somefield>AAA</somefield>
   </level2>
   <level2>
        <somefield>BBB</somefield>
   </level2>       
</level1>
<level1>
   <name>SecondParent</name>
   <level2>
        <somefield>CCC</somefield>
   </level2>
   <level2>
        <somefield>DDD</somefield>
   </level2>
</level1>

サンプル XML2

<level1>
   <name>SecondParent</name>
   <level2>
        <somefield>DDD</somefield>
   </level2>
   <level2>
        <somefield>CCC</somefield>
   </level2>
</level1>
<level1>
   <name>FirstParent</name>
   <level2>
        <somefield>BBB</somefield>
   </level2>
   <level2>
        <somefield>AAA</somefield>
   </level2>          
</level1>

RecursiveElementNameAndTextQualifier をデバッグすると、FirstParent が controlnode として取得され、SecondParent が testnode として取得されていることがわかります。したがって、ノードが異なると正しく結論付けます。しかし、私が必要としているのは、FirstParent と SeconParent の両方を他のファイルの正しい一致と比較することです。

そのため、最初に上位レベルのノードをソートする必要があるようです (?)。

どうすればこれを克服できるか知っている人はいますか?親の正しいタンデムを ElementQualifier に渡すには、何を確認/変更/実装する必要がありますか?

正しい方向性があれば、必要なものを開発できるかもしれません。

4

4 に答える 4

1

XMLUnit 1 または 2 を使用しているかどうかは指定されていませんが、バージョン 2 (2.0.0-alpha-04) で DiffBuilder を使用すると、この問題が発生しました。解決策は、デフォルト以外の ElementSelector を Default Matcher に渡す Diff を作成することです。

import org.xmlunit.diff.Diff;
import org.xmlunit.builder.DiffBuilder;
import org.xmlunit.diff.ElementSelectors;
import org.xmlunit.diff.DefaultNodeMatcher;

. . .

Diff diff = DiffBuilder.
            compare(myExpectedResultXmlObj).
            withTest(myCompareToXmlObj).
            withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName)). 
            build();

Assert.assertFalse(diff.toString(), diff.hasDifferences());

重要な部分は withNodeMatcher 行です。

于 2016-03-31T16:15:31.487 に答える
1

ドキュメントの同じブランチを取得するために必要な条件について考える必要があります。あなたの説明から、2つのlevel1要素を順序を入れ替えて比較したいと考えています。nameネストされた最初の子要素のテキスト コンテンツを調べて、一致するペアを特定したいようです。そして、このテキストだけで、他には何もありません。

これはそうではありませんRecursiveElementNameAndTextQualifierすべての子要素の要素名とネストされたテキストを比較します。また、要素の順序somefieldが入れ替わっているため、比較したいノードは対象外です。

level1一致するノードのペアがまったく見つからない場合、XMLUnit は要素を順番に選択するようにフォールバックすることがわかります。に設定compareUnmatchedすると、代わりに違いfalseが得られます。CHILD_NODE_NOT_FOUND

XMLUnit 1.x (2.x はまだリリースされていません) では、ElementQualifier必要なロジックを埋め込む を自分で作成する必要があります。必要な機能を正確に実行するビルトインはありませElementQualifierん。

于 2015-10-08T04:46:01.757 に答える