2012-03-08 51 views
0

我已經實現了NSXMLParserDelegate協議,並且似乎成功地使用NSXMLParser解析了XML。我正在解析的XML的XSD與100個左右的標籤和屬性相當相關,它們有時可以相當深地嵌套。我正在從XML文檔中的數據中填充對象層次結構,並且目前爲止似乎都很順利。測試NSXMLParserDelegate類

我的問題是,我如何有效地測試這個?在我的委託中有很多「if/else if」邏輯,以及BOOL標誌可以跟蹤我在解析文檔中的位置。在寫代理時,我可以很容易地引入印刷錯誤。

我最初的傾向是創建一個使用XSD中指定的所有元素和屬性的測試輸入文檔。一旦它被解析,我就可以「NSLog()」插入到對象層次結構中的所有東西,但這似乎太勞力密集了。

有沒有更好的方法來思考這個問題,還是我只是捲起袖子蠻橫逼迫它呢?

+0

我花了最後一週將我的委託重構爲具有表示xsd中元素關係的父/子關係的數據類型類層次結構。不再有BOOL或if/else - 如果邏輯樹。現在我可以將這些類表示的數據類型基於xsd連接在一起。我還爲類實現的協議添加了printContents方法。 printContents方法將存儲在對象中的數據輸出爲適當的XML,然後調用其子對象來執行相同操作。我能夠使用輸出作爲輸入,並在一些修復後,得到兩者匹配。 – 2012-03-16 06:52:33

回答

0

你會想看看在這裏使用單元測試。如果您可以生成一個(或多個)會導致已知數據結構的文件,那麼可以在單元測試中解析它們,並驗證數據結構是您期望的數據結構。

我們這樣做了很多,我們的管理既分析和生成XML文件類型(和樂趣,我們連上發電機的另一個單元測試輸出到分析器)。

有從蘋果建立Unit Tests很多很好的背景資料,以及大量的開源項目都使用單元測試也是如此。

有了這樣的計劃,你寫出來的比較器(或使用isEqual:方法是否適合你的對象層次結構),然後您可以重複使用,對你的每個測試。添加幾個XML文件並在單元測試中手動創建匹配的對象層次結構,並且您都準備好了。