2017-01-24 57 views
0

版本比較時忽略元素的順序我有以下格式的XML:如何使用XMLUnit測試

<Root> 
    <Elem1> 
     <SubElem1>A</SubElem1> 
     ... 
    </Elem1> 
    <Elem1> 
     <SubElem1>B</SubElem1> 
     ... 
    </Elem1> 
    <Elem2> 
     ... 
    </Elem2> 
    ... 
</Root> 

我想指示XMLUnit測試的區別引擎忽略ElemN元素的順序,但僅限於他們的「羣」。

例如:

  • 如果第二和前面例子中所述第一Elem1會改變順序=>等於
  • 如果elem2時將Elem1之前或在Elem1 =>差的中間成爲

有沒有辦法實現這個結果?

回答

0

是的,這是ElementSelector的工作。默認情況下,XMLUnit(2.x)按照它們出現的順序比較元素,但您可以通過使用ElementSelector來影響選擇哪個同胞。

我的情況你似乎很高興選擇元素,除非它們被命名爲Elem1。對於Elem1,您希望根據嵌套在SubElement1孩子中的文字來選對。寫一個方法這樣的ElementSelector可能是

ElementSelectors.ConditionalBuilder() 
    .WhenElementIsNamed("Elem1") 
    .ThenUse(ElementSelectors.ByXPath("./SubElem1", ElementSelectors.ByNameAndText)) 
    .ElseUse(ElementSelectors.Default) 
    .Build(); 

見XMLUnit測試user guide的更多細節和例子。

+0

我必須根據自己的需要調整您的答案,因爲我想將所有元素組合在一起,而不僅僅是Elem1元素,但ElementSelector將我指向了正確的方向。 –