Тест JUnit, если XML-документ отсортирован по произвольному столбцу - PullRequest
3 голосов
/ 26 апреля 2010

Учитывая XML-документ, такой как

<root>
  <row>
    <a>2</a>
    <b>1</b>
    <c>8</c>
  </row>
  <row>
    <b>5</b>
    <a>2</a>
    <c>8</c>
  </row>
  <row>
    <a>2</a>
    <c>8</c>
    <b>6</b>
  </row>
</root>

Есть ли простой способ утверждать, что документ XML отсортирован по элементу B в XMLUnit

Редактировать: У меня странная проблема с программным обеспечением, которое я не могу изменить, если значение тегов XML в любом данном узле должно быть в определенном порядке. Я хотел бы, чтобы в моем тестовом сборе этот набор правил применялся перед любой другой проверкой.

Ответы [ 3 ]

2 голосов
/ 27 апреля 2010

Используйте значение следующего простого выражения XPath 1.0 :

not(//b[. > following::b])

1 голос
/ 27 апреля 2010

Если вы можете выполнить XQuery, тогда утверждение XQuery:

every $i in (1 to count ($x/row) - 1)
satisfies 
   let $j :=  $i + 1   
   return number($x/row[$i]/b) <= number($x/row[$j]/b)

, где $ x является документом, истинно, если строки расположены в порядке возрастания b, в противном случае ложно

1 голос
/ 27 апреля 2010

Вы можете построить утверждение вокруг выбора XPath.

Вероятно, самый простой способ - использовать выражение XPath /root/row/b, запросить тип результата NODESET, а затем скопировать текст из каждого узла результата в структуру List. Вы можете утверждать, что текст в этом списке равен «ожидаемому» списку, созданному методом Arrays.asList() (я предполагаю, что вы используете Java).

...