2010-07-02 24 views
2

我需要爲返回xmldocument的方法創建單元測試。我應該在這種情況下驗證什麼?該方法檢查數據庫並創建一個xmldocument並將數據發送回客戶端。返回xmldocument的方法的單元測試

我應該看看如果返回的xmldocument具有所有預期的xml標籤嗎?或者我應該有一個Expected.xml文件並匹配與此xml文件一起返回的xmldocument。如果我按照第二種方法行事,那麼無論我在尋找什麼都不存在於數據庫中,那麼這個測試總是會失敗。我想編寫一個不依賴於任何特定數據的測試,但應該檢查方法返回的數據是否正確,所以我傾向於只檢查標記的方法,並假設如果標記存在並且這些標籤中的值也是正確的。

讓我們假設我爲圖書館應用程序編寫了這個測試,該應用程序給出了發給特定成員的所有書籍的列表。成員由一個ID標識那一定是字符串:

<Member id=""> 
<Book> 
    <Name>Book_name</Name> 
    <Author>author</Author> 
    <Due_date>due date </Due_Data> 
</Book> 
</Member> 

,所以我需要驗證我的方法是否會返回一個XMLFILE像上面。我需要驗證標籤是否正確,並且它包含值(而不是空值)。

您認爲應該採取什麼更好的方法?如果以前有人處理過這種情況,那麼如果你能分享你的經驗,那將是非常好的。

感謝,

回答

2

問題不在於XmlDocument - 很容易檢查它是否匹配預期的輸出。

你的問題更多的是與測試輸入數據有關。在這種情況下,您需要針對專門設置的測試數據庫運行代碼,以便您可以依賴它始終返回給定查詢的相同數據,或者需要模擬數據庫(通過調用數據庫你自己的班級,這樣你就可以用一些簡單地假裝爲數據庫的代碼替換它,並返回你想要嘗試的單元測試輸入)

一旦你可以提供定義好的測試輸入到方法,驗證每個測試輸入產生所需的測試輸出 - 單元測試。

如果您希望不那麼嚴格,那麼您可以檢查數據庫是否返回了正確形式的XML文檔(包含一組關鍵元素和屬性),但仍需要您具有一些有效的輸入數據以測試(因此您可能仍然需要一個測試或模擬數據庫),並且不會完全測試該方法。

編輯

要回答你的編輯,你可以測試是否一個XmlDocument的特定位是「有效」很容易。例如是否爲根元素「成員」:

Assert(doc.DocumentElement.Name == "Member"); 

根元素是否具有非空白的子元素「Name」,並且沒有子元素?

Assert(doc.DocumentElement["Name"] != null); 
Assert(!string.IsNullOrEmpty(doc.DocumentElement["Name"].InnerText)); 
Assert(doc.DocumentElement["Name"].ChildNodes.Count == 0); 

+0

是啊,Mockdatabase似乎是正確的方式。謝謝 – 2010-07-02 20:05:40

0

將所得到的文檔總是蜜蜂100%相同,或者你需要實際檢驗數據中文件

如果是100%,我會在測試項目中存儲預期文檔的文件副本,將其添加到資源文件中,並執行直接字符串< - >字符串比較。

如果具體的數據,我會以相同的方式在測試項目中存儲文檔的精簡版本,並創建一個比較引擎,它接受兩個文檔並讀取一個(存儲的資源)中的所有現有值,到測試目標中的相應值。

如果它適用於您的方案,100%版本更容易,更準確。