0

こんにちは、XML Units RecursiveElementNameAndTextQualifier を使用しようとしていますが、以下のテストが失敗しています。以下のテスト xml ファイルで foo3 と foo2 の値を入れ替えると、テストは true (for diff.similar()) で渡されます。問題が何であるかわかりません.RecursiveElementNameAndTextQualifierは特定の深さにしか行きませんか?

コントロール:

<table>
    <tr>
        <td>
            <a>foo</a>
            <a>foo1</a>
        </td>
        <td>
            <a>foo2</a>
            <a>foo3</a>
        </td>
    </tr>
    <tr>
        <td>
            <a>bar</a>
        </td>
    </tr>
</table>


**Test:**
<table>
    <tr>
        <td>
            <a>bar</a>
        </td>
    </tr>
    <tr>
        <td>
            <a>foo3</a>
            <a>foo2</a>
        </td>
        <td>
            <a>foo1</a>
            <a>foo</a>
        </td>
    </tr>
</table>


DetailedDiff detDiff = new DetailedDiff(diff);
diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());

XMLUnit.setNormalizeWhitespace(true);
System.out.println("Similar? " + diff.similar());
4

1 に答える 1

1

foo2 と foo3 の行を交換するとうまくいくように見えますが、偶然です。XMLUnit に要素をランダムに一致させないように指示した場合、一致するべきではありません

XMLUnit.setCompareUnmatched(false);

まったく別の写真が表示されます。

[different] Expected presence of child node 'tr' but was 'null' - comparing <tr...> at /table[1]/tr[1] to  at null
[not identical] Expected sequence of child nodes '3' but was '1' - comparing <tr...> at /table[1]/tr[2] to <tr...> at /table[1]/tr[1]
[different] Expected presence of child node 'null' but was 'tr' - comparing  at null to <tr...> at /table[1]/tr[2]

RecursiveElement...ネストされたバー テキストを含む を選択しますが、他の 2 つの を同等trとはまったく見なしません。tr他に一致するものがないため、XMLUnit はそれらを選択するだけです (上記のフラグを使用しない限り、要素を順番に選択することがデフォルトのフォールバックです。

RecursiveElementNameAndTextQualifier子要素がまったく同じ順序で表示される場合にのみ機能します。これは、 の子には当てはまらず、 の子にtrも当てはまりませんtd

于 2015-02-08T11:07:17.090 に答える