2012-12-12 95 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現在按預期工作。