2012-02-11 91 views
1

我正在使用TDD併爲使用非託管資源的System.IO.Stream對象創建單元測試。我的項目由許多這樣的流組成,我想測試這些實現在處置時是否真正清理了它們的非託管資源。單元測試是否清理了非託管資源

任何想法我可以做到這一點?

今天早上我可能會有點疲憊,但我所能想出的就是創建並部署1k實例並查看內存消耗情況。

我還必須考慮如果他們沒有從Read()中超時會怎麼樣,所以如果有一些偉大的通用超級奇妙的方法來測試可能相關的流。

回答

0

取決於資源是什麼,但是如果您將一個流保存到磁盤,並且您沒有清理代碼好友,嘗試刪除該文件會導致問題。

但是,TTD方法會導致您的代碼應該處理並拋出的異常(首選但不總是)。然後進行測試,將其作爲預期異常進行檢查,然後檢查資源以查看它們是否已正確整理。當然,這是爲了測試已知的情況,無論有多困難。

我們也使用了很多流,但基本上我們遵循FxCop和最佳實踐,編寫了一些實用例程和輔助類。之後,它宗教地使用或實施IDisposable。

我完全推薦的另一件事是使用FileStream的「完整」版本讀取和寫入磁盤。

你沒有看到類似

XmlDocument doc = new XmlDocument() 
doc.Load("myxml.xml"); 

相反,我們做

XmlDocument doc = new XmlDocument() 
using(FileStream fs = new FileStream("myxml.xml",FileMode.Open, FileAccess.Read)) 
{ 
    doc.load(fs); 
} 

敲定許多未知,你可以,如果你選擇的神微笑在你身上,可能所有的人在務實和實際意義上。

相關問題