2016-04-04 5 views
0

Я сравниваю сохраненный пример xml с живым marshalled xml в моем тестировании JUnit. Проверка наличия пары ключей в xml.XmlUnit order on value value

творю использование XmlUnit 2.1.0 конкретно

Мой XML выглядит следующим образом:

<entries> 
     <entry> 
      <key>delete</key> 
      <value>ENABLED</value> 
     </entry> 
     <entry> 
      <key>view</key> 
      <value>DISABLED</value> 
     </entry> 
     <entry> 
      <key>create</key> 
      <value>DISABLED</value> 
     </entry> 
    </entries> 

Порядок записей может изменяться. Я не уверен, как заставить его правильно проверять, так как он видит другое ключевое значение как различие в xml, хотя это просто изменение заказа.

я утверждаю сходство с последующим утверждением в JUnit:

assertThat(marshalledXml, isSimilarTo(Input.fromFile("path/to/example.xml").ignoreWhitespace().ignoreComments()); 

Я подозреваю, что, возможно, придется использовать XPath matchers или DefaultNodeMatchers с ElementSelector.

+2

Вам необходимо переопределить квалификатор элемента (см. Второй ответ на http://stackoverflow.com/questions/16540318/compare-two-xml-strings-ignoring-element-order) – Pace

+1

Другой вопрос касается XMLUnit 1 .x, этот явно запрашивает XMLUnit 2.x, который имеет другой API. –

ответ

1

Да, вам необходимо предоставить ElementSelector, который «знает», какие узлы выбрать для сравнения в вашем конкретном случае.

Для большей части документа имя элемента должно быть тем, что вы должны использовать. По крайней мере, это верно для entries, key и value. Для элементов entry вы хотите сравнить те элементы, которые имеют соответствующий вложенный текст в элементе key, который является их непосредственным потомком, не так ли?

Я думаю, что это приводит к

ElementSelectors.conditionalBuilder() 
    .whenElementIsNamed("entry") 
    .thenUse(ElementSelectors.byXPath("./key", ElementSelectors.byNameAndText)) 
    .elseUse(ElementSelectors.byName) 
    .build(); 

См https://github.com/xmlunit/user-guide/wiki/SelectingNodes для более детального обсуждения ElementSelector вариантов. Ваш XML довольно близок к примеру table, который используется во введении и обсуждается в следующих разделах.