Java XMLUnit RecursiveElementName和TextQualifier不工作

Java XMLUnit RecursiveElementName和TextQualifier不工作,java,xmlunit,Java,Xmlunit,您好,我正在尝试使用XML单元RecursiveElementName和TextQualifier,但是我下面的测试失败了。当我在下面的测试xml文件中交换foo3和foo2的值时,测试以true(对于diff.similor())通过。不确定问题出在哪里。RecursiveElementNameAndTextQualifier是否只针对特定深度 控制: <table> <tr> <td> <a>fo

您好,我正在尝试使用XML单元RecursiveElementName和TextQualifier,但是我下面的测试失败了。当我在下面的测试xml文件中交换foo3和foo2的值时,测试以true(对于diff.similor())通过。不确定问题出在哪里。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());

福
foo1
食物2
foo3
酒吧
**测试:**
酒吧
foo3
食物2
foo1
福
DetailedDiff detDiff=新的DetailedDiff(diff);
diff.overrideElementQualifier(新的RecursiveElementNameAndTextQualifier());
setNormalizeWhitespace(true);
System.out.println(“相似?”+差异相似());

当您交换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]
[不同]预期存在子节点“tr”,但为“null”-将/table[1]/tr[1]处的值与null处的值进行比较
[不完全相同]子节点“3”的预期序列为“1”-将at/table[1]/tr[2]与at/table[1]/tr[1]进行比较
[不同]预期存在子节点“null”,但为“tr”-将null处的值与/表[1]/tr[2]处的值进行比较
<>代码>递归元素.<代码>使用嵌套的条形文本选择<代码> Tr/代码> s,但完全不考虑其他两个代码< Tr>/Cord>s。XMLUnit只是拾取它们,因为没有其他匹配项(并且按顺序拾取元素是默认的回退,除非使用上面的标志)

RecursiveElementNameAndTextQualifier
仅当子元素以完全相同的顺序出现时才起作用-这不适用于
tr
s的子元素,甚至不适用于
td
s的子元素