2012-12-12 53 views
1

我遇到了麻烦XMLUnit测试使用setIgnoreWhitespace忽略我的XML空白...任何想法可能是错误的或者是我可以检查setIgnoreWhitespace?问题与XMLUnit测试

JVM:1.6,XMLUnit测试1.3,IDE:JDeveloper中11.1.1.6

例如下面返回 “预期数量的子节点 '2',但为 '1'”。如果我拿出它通过的额外空间。

@Test 
public void testExample() { 
    String inputXML = "<test><innertest>data</innertest></test>"; 
    String expectedResultXml = "<test> <innertest>data</innertest></test>"; 

    XMLUnit.setIgnoreWhitespace(true); 
    XMLUnit.setIgnoreComments(true); 
    XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true); 

    try { 
     assertXMLEqual("Did not match!!", expectedResultXml, inputXML); 
    } catch(Exception e) {} 
} 

回答

2

我的classpath中必须有一些不兼容的XML库。如下所示覆盖JAXP库解决了问题(还添加了xerces和xalan jar)。

XMLUnit.setControlParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); 
    XMLUnit.setTestParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); 
    XMLUnit.setSAXParserFactory("org.apache.xerces.jaxp.SAXParserFactoryImpl"); 
    XMLUnit.setTransformerFactory("org.apache.xalan.processor.TransformerFactoryImpl"); 
1

它看起来有点你期望的任何空格字符将被忽略,但这不是那种设置。

XMLUnit.setIgnoreWhitespace

是否比较节点值时忽略空白。

[...]

设置此参数对文本内的空白不起作用。

此设置并不意味着仅删除空白文本节点(并且未检查)。这只会意味着在比较<test>元素的节点值时会忽略空白。但是那个测试没有引起这个消息。在你的情况下,检查子节点的数量确实引发了这个信息。

有关更详细的说明和更多配置选项(例如XMLUnit.setNormalizeWhitespace),请参阅3.8.1. Whitespace Handling

+0

不是文本,它包含节点?无论如何,下面的代码解决了这个问题,所以非常确定这是它... – mrcrabs

+0

不,包含一个孩子是一个文本节点(即空间)。由于该textnode预计,它的期待。您也可能想要将此报告为一个错误,因为根据文档,不能期望JAXP库。 – hakre

-1

重写JAXP库为@ user392909没有,没有为我取得成功。

但随着我的另一个项目库中的冲突是根本原因。首先,我改变了一些最终固定测试的库的进口顺序。所以我能够找出冲突的图书馆。这是j2ee.jar。

我删除它(并有由Tomcat的catalina.jar,Tomcat的juli.jar和javamail.jar来取代它,以解决即将到来的编译错误)。

的进口秩序并不不再重要,因为取出的j2ee.jar /更换和XML DIFF现在按预期工作。