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...选择tr带有嵌套条形文本的 s,但根本不考虑其他两个trs 可比。XMLUnit 只是选择它们,因为没有其他匹配项(并且按顺序选择元素是默认的回退,除非您使用上面的标志。

RecursiveElementNameAndTextQualifier仅当子元素以完全相同的顺序出现时才有效 - 对于s 的子元素tr,甚至对于 s的子元素,情况都不是这样td

于 2015-02-08T11:07:17.090 回答