我寫了一個savefile方法來保存一個對象到xml。但我不確定如何在NUnit中測試該方法。我是否需要手動創建示例文件並比較文件之間的字符串?有沒有更好的方法來測試這個方法?如何在NUnit中編寫測試方法來測試savefile方法?
感謝您的回答。
我寫了一個savefile方法來保存一個對象到xml。但我不確定如何在NUnit中測試該方法。我是否需要手動創建示例文件並比較文件之間的字符串?有沒有更好的方法來測試這個方法?如何在NUnit中編寫測試方法來測試savefile方法?
感謝您的回答。
以下是我所做的 - 適用於我,但它可能不符合您的規格。
在拆解過程中,我確定刪除了可能作爲套件一部分創建的任何文件。所以是的,確保該文件是一個臨時文件只用於測試
在測試方法中,我刪除文件,如果它存在(它不應該作爲拆卸已經照顧它),然後輸出文件到XML然後聲明文件存在。然後,我將文件重新加載到對象圖或xml DOM中,並根據需要通過儘可能多的斷言來查詢狀態。
如果您可以避免寫入文件,並且您的設計允許您寫入通用文本編寫器或xml編寫器,那麼您可以繞過文件保存並用字符串編寫器替換調用,而只是查詢字符串。更清潔但不測試實際的文件持久性是否正常工作。
呃,驗證XML輸出。歡迎來到地獄:)
已經爲我工作的方法是在內存中生成一個XmlDocument
對象。然後運行您的SaveFile方法,並將其加載到另一個XmlDocument
。遞歸地遍歷兩個XmlDocuments,比較所有元素和屬性。
不幸的是,使用C#對象編寫xml非常龐大。我建議一次測試小節。也許你的保存文件有一個<FileList>
子元素,一個<Cups>
子元素和<Rifles>
子元素。在這種情況下,編寫一系列測試以確保每個子部分都正確完成,而不是整個輸出。
如果您顯示代碼會更容易。 我的解決方法是增加一層抽象。 不要讓您的Save方法直接與XmlWriter交易。相反,創建一個包裝器,每個包裝器都能夠將數據的小塊邏輯塊保存到xml中,然後對其進行測試。
每個包裝有像
void Persist(XmlWriter writer);
的方法,讓保存剛剛從包裝收集數據。換句話說,這將是Wrappers負責妥善保存數據,但每個人只負責其中的一小部分。 在那裏,你可以通過比較字符串測試(放的StringWriter到您的XmlWriter傳遞到堅持法)
設計類,讓你有SAVEFILE(字符串文件名)和SAVEFILE(XmlWriter的作家)。 SaveFile(字符串文件名)只需要爲指定的文件創建一個XmlWriter並調用SaveFile(writer)。在可以使用模擬XmlWriter的SaveFile(XmlWriter writer)方法上進行廣泛的單元測試。測試一些錯誤條件 - 如果您希望處理它們而不是傳播它們 - 在SaveFile(字符串文件名)方法上。根據錯誤處理,您可能根本不需要創建文件。
順便說一句,如果你不想直接使用XmlWriter,你不需要暴露你的方法。您可以將其設置爲私有,並使用訪問器在您的測試中調用它。
選項
你可能想改寫你的問題..如果你正在專門查看驗證生成的XML。如何編寫測試來驗證XML輸出? – Gishu 2008-10-17 16:17:46