您好我正在尝试使用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());
答案 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
的子元素则不然第