Обнаружена неожиданная разница при сравнении элементов с пустыми элементами в xmlUnit

Сравнивая эти два фрагмента XML:

testXml:
<ELEMENT1>
    <CHILD1></CHILD1>
</ELEMENT1>

actualXml:
<ELEMENT1>
    <CHILD1>notEmpty</CHILD1>
</ELEMENT1>

с помощью:

Diff diff = new Diff(testXml, actualXml);
Detailed detailedDiff = new DetailedDiff(diff);

Сейчас detailedDiff.getAllDifferences(); вернет DifferenceConstants.HAS_CHILD_NODES_ID Разница, и если вы выводите разницу на консоль, она выглядит так:

Expected presence of child nodes to be 'false' but was 'true' - comparing <CHILD1...> at /ELEMENT1[1]/CHILD1[1] to <CHILD1...> at /ELEMENT1[1]/CHILD1[1]

У меня вопрос, почему разница типа DifferenceConstants.HAS_CHILD_NODES_ID и не DifferenceConstants.TEXT_VALUE_ID? Структура двух фрагментов XML одинакова, но их текстовое значение отличается.

Итак, почему это не вызывает разницу?

1 ответ

Попробуйте использовать это ElementQualifier:

Diff diff = new Diff(testXml, actualXml);
diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier() );
Detailed detailedDiff = new DetailedDiff(diff);

вот описание от Javadoc:

public RecursiveElementNameAndTextQualifier()

Использует имена элементов, а текст вкладывает произвольный уровень дочерних элементов глубже в элемент для сравнения элементов. Проверяет все узлы, а не только первый дочерний элемент. Не игнорирует пустые текстовые узлы.

Интересная вещь здесь - "не игнорировать пустые текстовые узлы".

Похоже, что по умолчанию ElementQualifier обрабатывает пустые узлы как отсутствующий узел и проверяет только первую ошибку, связанную с одним узлом. Так что в вашем случае, возможно, выдается только "HAS_CHILD_NODES_ID" вместо включения "TEXT_VALUE_ID".

По крайней мере, RecursiveElementNameAndTextQualifier идет глубже

Другие вопросы по тегам