使用XMLUnit RecursiveElementNameAndTextQualifier比较XML

时间:2009-01-30 14:57:09

标签: java xml unit-testing junit

我正在尝试使用XMLUnit 1.2比较2个XML文件。我正在使用RecursiveElementNameAndTextQualifier()限定符。

在我的XML中更改某些实体顺序的顺序时,会导致XMLUnit传递某些情况并在其他情况下失败。

我的XML文件看起来像这样,我将它与一个类似的副本进行比较,其中一个属性的一个对等点的位置交换很简单。

<root> 
  <ent> 
   <value> 
     <int>1</int>  
   </value> 
   <value> 
    <int>2</int>  
   </value> 
  </ent>  
  <ent> 
   <value> 
     <int>3</int>  
   </value> 
   <value> 
     <int>4</int>  
   </value> 
  </ent> 
</root>  

当使用int:2交换int:1时,在其中一个XML文件中,测试失败。但是当使用int:3交换int:4时,它会继续传递。

这是我的测试代码:

public void testRecursiveElement() throws Exception {  

InputSource xml1 = new InputSource("xml1.xml"); 
InputSource xml2 = new InputSource("xml2.xml"); 

Diff myDiff = new Diff(xml1, xml2); 
myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier() ); 

assertXMLEqual("Not similar", myDiff, true); 
} 

你能说明问题是什么,为什么XMLUnit在第一种情况下检测差异而不是在第二种情况下检测差异。有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

我试图重现你描述但没有成功的行为。使用RecursiveElementNameAndTextQualifier时,元素的顺序似乎并不重要。所以既不交换int:1和int:2,也不交换int:3和int:4导致我的测试中出现断言错误。

我不知道您期望哪种行为,但将RecursiveElementNameAndTextQualifier更改为ElementNameAndTextQualifier导致两个交换案例的断言错误。