XMLUnit RecursiveElementNameAndTextQualifier不起作用

时间:2014-05-20 06:22:25

标签: java xmlunit

您好我正在尝试使用XML Units RecursiveElementNameAndTextQualifier,但我的下面的测试失败了。当我在下面的测试xml文件中交换foo3和foo2的值时,测试将以true(对于diff.similar())传递。不确定问题是什么..RecursiveElementNameAndTextQualifier只会到特定的深度?

Contorl:

<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());

1 个答案:

答案 0 :(得分: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...选择带有嵌套条形文本的tr,但不会认为其他两个tr具有可比性。 XMLUnit只是选择它们,因为没有其他匹配(除非你使用上面的标志,否则按顺序挑选元素是默认的回退。

RecursiveElementNameAndTextQualifier仅在子元素以完全相同的顺序出现时才有效 - tr的子元素不是这种情况,td的子元素则不然第