我有一個函數,其中包含一個ODataObject
,其中包含來自消息總線觸發事件的一些XML。我正在編寫測試用例來檢查我的函數如何處理來自僅包含以下內容的消息總線的XML:<?xml version="1.0" encoding="UTF-8"?>
。從XML字符串創建節點而不使用解析
這是我如何創建一個被傳遞給我的其他測試用例
final Document document = DOMUtil.parse(TestEventXML)
final DataObject dataObject = new ODataObject(document.getDocumentElement())
myListener.onMessage(dataObject)
然而,數據對象,在上面的字符串傳遞爲TestEventXML
返回此錯誤:
java.lang.NullPointerException: Cannot invoke method getDocumentElement() on null object
因爲對格式錯誤的XML字符串調用DOMUtil.parse()
將返回空值。
所以,我需要一些解決方法,這將允許我創建一個org.w3c.dom.Node
,我可以將其傳遞到ODataObject
的構造函數中,這是我創建的XML字符串中的一個。任何想法,建議等將不勝感激。
編輯 - 問題
澄清的總結,我知道,我想傳遞的字符串就是沒有內容的XML文件的標題。但有時候這就是通過消息總線發生的事情,所以我需要測試我的函數是否正確處理它。我的函數確實有處理格式錯誤的XML的代碼,所以我的問題不是如何檢查XML是否格式錯誤。問題是我需要創建一個DataObject來測試我正確處理它。但是我不能使用格式不正確的XML創建一個DataObject,因爲解析返回null。
EDIT 2 - 如何我目前正在處理畸形/空XML
在我onMessage
功能,我呼籲傳入數據對象,它返回的數據對象的XML字符串的方法toString
。然後,要創建一個groovy.util.Node
對象,我嘗試new XmlParser().parseText(xmlString)
並捕獲所有由SAXParseExcetions
導致的XML格式錯誤或爲空。 onMessage
函數剛剛返回,跳過該函數其餘部分的所有解析代碼。
附錄 - 這可能會回答我原來的問題
org.w3c.dom.Node
另一個問題是一個接口,所以我不能只是做new 0DataObject(new Node())
。有沒有辦法創建一個節點,並將正確的屬性設置爲我的XML字符串?
請對任何問題發表評論。
這似乎是一個測試場景......當在實際的程序流程中,您的偵聽器是由一個由近乎空XML形成的「ODataObject」觸發時會發生什麼?也許你想看看'ODataObject'是如何構造的,並着眼於找到一種方法來手動構造'ODataObject',而不是'Node'。 (也許我在回答中引導你錯誤地注意到'Node'--對不起!) –
我想,將來我可能會研究這個。目前,我發現了一個使用Groovy的'MockFor'類的修復程序。我對「ODataObject」做了一個模擬,傳入格式正確的XML,然後攔截'toString'函數返回格式錯誤的XML。不漂亮,但它現在工作。 –