ElementQualifier XMLUnit запутывается, когда есть несколько элементов с одинаковым именем тега
Я пытаюсь сравнить ниже два XML... Я делаю тест сходства.
XML1
<top>
<first>true</first> <!--- control node 1 ---->
<second> <!--- control node 2 ---->
<secondpart1>ooo</secondpart1>
</second>
<third> <!--- control node 3 ---->
<thirdpart1>zzzz</thirdpar1>
</third>
<third> <!--- control node 4 ---->
<thirdpart1>zzzz</thirdpar1>
<thirdpart2>zzzz</thirdpar2>
</third>
</top>
xml2
<top>
<second> <!--- test node 1 ---->
<secondpart1>ooo</secondpart1>
</second>
<third> <!--- test node 2 ---->
<thirdpart1>zzzz</thirdpar1>
</third>
<third> <!--- test node 3 ---->
<thirdpart1>zzzz</thirdpar1>
<thirdpart2>zzzz</thirdpar2>
</third>
<first>true</first> <!--- test node 4 ---->
</top>
Я получаю эту ошибку
[разные] Ожидаемое количество дочерних узлов "1", но было "2". Похоже, он сравнивает управляющий узел 3 с тестовым узлом 3. И поскольку имена элементов совпадают с "третьим", он выполняет сравнение. Есть ли работа вокруг такой ситуации?
Это мой код
Diff d = new Diff(xmlResponseTrim, serializedResponseTrim);
DetailedDiff dd = new DetailedDiff(d);
dd.overrideDifferenceListener(new IgnoreTextAndAttributeValuesDifferenceListener());
System.out.println(dd);
assertTrue(dd.similar());
1 ответ
ElementQualifier
Интерфейс - это то, что определяет, какие элементы XMLUnit сравнивают друг с другом. Для вашего конкретного случая RecursiveElementNameAndTextQualifier
будет работать, но это не общее решение. В более сложных случаях вам придется реализовать соответствующую стратегию в своей собственной реализации.