XmlUnit исключая элемент из сравнения - PullRequest
0 голосов
/ 14 февраля 2020

Задача состоит в том, чтобы исключить IsoDateTime при сравнении двух XML с помощью XmlUnit lib

Пример:

<Product>
     <InfoCommon>
         <Dates>
             <IsoDateTime>2020-02-11T11:41:33.12345</IsoDateTime> <!-- This should be excluded -->
         </Dates>
     </InfoCommon>
     <ClientInfo>
         <Address>
             <Index>xxxxxx</Index>
         </Address>
     </ClientInfo>
     <AnotherInfo>
         <Dates>
             <IsoDateTime>2020-02-11T11:41:33.12345</IsoDateTime> <!-- Should not be excluded -->
         </Dates>
     </AnotherInfo>
</Product>

Исключить узел IsoDateTime (оба узла) легко разрешается с помощью withNodeFilter , но это не то, что мне нужно.

Diff xmlDiff = DiffBuilder
    .compare(target)
    .withTest(source)
    .checkForSimilar()
    .withNodeFilter(n -> n.getNodeName().equals("IsoDateTime"))
    .build()

Я добавил xmlunit-placeholder и добавил $ {xmlunit.ignore} в / Product / InforCommon / Dates / IsoDateTime, но это никак не работает

Diff xmlDiff = DiffBuilder
    .compare(target)
    .withTest(source)
    .checkForSimilar()
    .withDifferenceEvaluator(new PlaceholderDifferenceEvaluator())
    .build()
<Product>
    <InfoCommon>
        <Dates>
            <IsoDateTime>${xmlunit.ignore}</IsoDateTime> //This should be excluded
        </Dates>
    </InfoCommon>
    <ClientInfo>
        <Address>
            <Index>xxxxxx</Index>
        </Address>
    </ClientInfo>
    <AnotherInfo>
        <Dates>
            <IsoDateTime>2020-02-11T11:41:33.12345</IsoDateTime> //Should not be excluded
        </Dates>
    </AnotherInfo>
</Product>

Есть ли способ установить условие фильтрации по XPATH, чтобы не исключать второй IsoDateTime

----------- - РАЗРЕШЕНО -------------

Решено путем реализации DifferenceEvaluator в виде всплеска. Итак / Product / InforCommon / Dates / IsoDateTime всегда равен TODAY и для моего сравнения:

if (testElement.getFirstChild().getNodeValue().substring(0,10).equals(LocalDate.now.toString())) 

затем

return ComparisonResult.SIMILAR;

Подробнее здесь

Для моего случая важно

...