XMLUnit - Добавлены теги?
При сравнении следующих двух документов с XMLUnit (последняя версия - 2.3.0) В этом документе порядок элементов не имеет значения, однако XMLUnit учитывает это, и поскольку новый элемент добавляется в начало родительского тега, это обнаруживает многократные изменения, когда только одно произошло.
Оригинальный XML (предыдущий):
<ACVS>
<ACV>
<N>735</N>
<C>S135</C>
</ACV>
<ACV>
<N>736</N>
<C>C0S135</C>
</ACV>
<ACV>
<N>7Q4</N>
<C>C0S135</C>
</ACV>
</ACVS>
Новый XML (текущий):
<ACVS>
<ACV>
<N>701</N>
<C>C10S120</C>
</ACV>
<ACV>
<N>735</N>
<C>S135</C>
</ACV>
<ACV>
<N>736</N>
<C>C0S135</C>
</ACV>
<ACV>
<N>7Q4</N>
<C>C0S135</C>
</ACV>
</ACVS>
Сравнение:
Diff fileChanges = DiffBuilder.compare(Input.fromFile(previous))
.withTest(Input.fromFile(current))
.ignoreWhitespace()
.checkForSimilar()
.build();
fileChanges.getDifferences()
Я заканчиваю с рядом изменений, поскольку элементы сопоставляются неправильно:
- ACV [1] - N [1]: ожидаемый "735", но был "701"
- ACV[1] - C[1]: ожидаемый "S135", но был "C10S120"
- ACV[2] - N[1]: ожидаемый "736", но был "735"
- и т.д... тогда:
- ACV [4]: добавлен новый тег
Когда я надеюсь на одно изменение:
- ACV [1]: добавлен новый тег
Есть ли способ, которым я могу достичь этого результата с помощью XMLUnit?
1 ответ
Вы хотите помочь XMLUnit понять, какие ACV
s принадлежат друг другу, указав ElementSelector
который идентифицирует пары. Но даже тогда вы получите два Difference
s, кроме "добавлен новый тег", будет "количество детей ACVS
это отличается.
Глядя на ваши примеры, вы, кажется, думаете о своем ACV
как это определено в текстовом содержании N
ребенок. Это то, что вам нужно сказать XMLUnit. Ситуация очень похожа на tr
пример в https://github.com/xmlunit/user-guide/wiki/SelectingNodes (заменить tr
с ACV
а также th
с N
). Вы должны быть в состоянии получить ожидаемый результат через
ElementSelectors.conditionalBuilder()
.whenElementIsNamed("ACV").thenUse(ElementSelectors.byXPath("./N", ElementSelectors.byNameAndText))
.elseUse(ElementSelectors.byName)
.build();
или вариация этого.