2017-01-24 62 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将我指向了正确的方向。 –