JUnit prova Se il documento XML è ordinato sulla colonna arbitraria
Domanda
Dato un documento XML come
<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>
C'è un modo semplice per affermare che il documento XML viene ordinato in base elemento B in XMLUnit
Modifica: Ho un problema strano con un pezzo di software che non posso cambiare, dove il valore dei tag XML in una data necessità nodo di essere in un ordine specifico. Mi piacerebbe che per il mio test harness di far rispettare questo insieme di regole prima di ogni altra convalida.
Soluzione
Usa il valore della seguente semplice XPath 1.0 espressione :
not(//b[. > following::b])
Altri suggerimenti
Si può costruire un'affermazione intorno a una selezione XPath.
Probabilmente il modo più semplice sarebbe quella di utilizzare il /root/row/b
espressione XPath, chiedere il tipo di risultato NODESET
, quindi copiare il testo da ogni nodo risultato in una struttura List
. Si può affermare che il testo in quella lista è uguale a un elenco "previsto" creata con il metodo Arrays.asList()
(sto supponendo che si sta utilizzando Java).
Se è possibile eseguire XQuery, quindi l'affermazione 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)
dove $ x è il documento, è vero se le righe sono in ordine crescente di b, altrimenti false