我正在使用TDD併爲使用非託管資源的System.IO.Stream對象創建單元測試。我的項目由許多這樣的流組成,我想測試這些實現在處置時是否真正清理了它們的非託管資源。單元測試是否清理了非託管資源
任何想法我可以做到這一點?
今天早上我可能會有點疲憊,但我所能想出的就是創建並部署1k實例並查看內存消耗情況。
我還必須考慮如果他們沒有從Read()中超時會怎麼樣,所以如果有一些偉大的通用超級奇妙的方法來測試可能相關的流。
我正在使用TDD併爲使用非託管資源的System.IO.Stream對象創建單元測試。我的項目由許多這樣的流組成,我想測試這些實現在處置時是否真正清理了它們的非託管資源。單元測試是否清理了非託管資源
任何想法我可以做到這一點?
今天早上我可能會有點疲憊,但我所能想出的就是創建並部署1k實例並查看內存消耗情況。
我還必須考慮如果他們沒有從Read()中超時會怎麼樣,所以如果有一些偉大的通用超級奇妙的方法來測試可能相關的流。
取決於資源是什麼,但是如果您將一個流保存到磁盤,並且您沒有清理代碼好友,嘗試刪除該文件會導致問題。
但是,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);
}
敲定許多未知,你可以,如果你選擇的神微笑在你身上,可能所有的人在務實和實際意義上。