2011-05-10 59 views
1

對於一個項目,我有一系列創建XML僞庫的(它們不是真正的倉庫,但填補了同樣的作用,所以我再也忍受不了了命名)通過調用一些返回的XML存儲的特效。爲了我的項目,我還有「映射器」(它們不是true映射器......)將XML作爲輸入並使用Linq將原始XML轉換爲DTO。我應該如何測試返回XML的「存儲庫」?

由於我有映射器,在我看來,「存儲庫」不應該測試返回的值(因爲這是映射器的工作;存儲庫只關心它返回了一些XML,無論是否XML數據是正確的)。但是,這會導致測試從字面上確保「存儲庫」的返回值不爲null。

基本上每一個倉庫實現了一種稱爲GetXml一個方法,它返回一個XML文檔的接口。實際的實現是數據庫調用,但爲了測試,我有一個非常基本的模擬類,它只返回一個空白的XML文檔。最終,我需要使用一些硬編碼的值來構建一個實際的XML文件,但是這個「確定」的版本庫測試基本上是單行的:Assert.IsNotNull(repository.GetXml(), "Xml response was null");

這是甚至應該測試的東西,還是有沒有更好的方法來測試這個沒有踩在映射器的腳趾?我想從設計的角度來看,我可以完全移除映射器,只需讓存儲庫自己完成映射(或者使映射器在存儲庫內部)。我沒有做TDD,因爲我實際上已經編寫了代碼,但是我想創建測試,因此測試更容易,所以我可以向我的同事展示測試的好處(我們目前不使用類型的自動化測試)。

我想我要問的是這樣的:它是好寫一個測試,只有表達了有意設計的人誰可以使用代碼,而無需實際關心的返回值?眼下這就是這些測試做的:他們說,在代碼中,「我應該能夠創建一個XmlXXXRepository類,實現了一個名爲IXmlRepository的接口,需要較長呼籲建設quoteID,並有一個名爲GetXml()方法返回一個XmlDocument對象「就是這樣。

回答

3

我通常爲我的XML方法編寫兩種類型的測試。首先,我編寫與創建XML結果有關的邏輯的單元測試。這通常會迫使您將您的邏輯提取到另一個類中,以便將邏輯和XML創建分開。這通常意味着邏輯最終會填充一個DTO,並且使用某種構建器類或簡單的XML序列化器來從產生的DTO創建XML。

一旦單元測試所有的工作,我開始與一組已知的輸入和著名的XML輸出創建集成測試。根據XML結果,這可以是非常簡單的文本比較,也可以是一系列XPath查詢來驗證XML中的結構和值。

哦,在MbUnit的的XML assertions都有不俗的表現進行這種測試。

相關問題