有誰知道我該如何爲包含FileStream的函數編寫單元測試?單元測試System.IO.FileStream
1
A
回答
4
這將有助於更多地瞭解您實際嘗試測試的內容。你想解析流/寫入流/其他東西嗎?
這裏最好的辦法就是讓該函數使用Stream而不是FileStream。這樣,在測試中,您可以使用內存中的流併爲其提供所需的數據,而不必在文件系統上創建測試文件。這是有益的,因爲你的測試運行得更快,不依賴於機器狀態,並且不需要具有接觸系統的安裝/拆卸代碼。
通常,系統中應該有很少的組件應該直接與文件系統/數據庫/等進行通信。真的,你所追求的是一個Stream或更高級別的對象,它恰好在某個文件中被持久化。
1
那麼,這不再是單元測試,而是集成測試,因爲您依賴於外部系統=>文件系統。因此,您可以將參數傳遞給方法文件的路徑,然後爲測試項目重新創建一些示例文件,然後在該文件上聲明一些東西。您可以使用相對文件名並將文件標記爲「始終複製」,以便爲每個測試迭代部署該文件。
0
如果您使用了此處顯示的接口IDbFileIo,那麼您可以創建一個模擬內存流返回值,而不是加載實際文件。
public interface IDbFileIo
{
MemoryStream LoadFile();
}
...實施
public MemoryStream LoadFile()
{
string databasePath = _pathInfo.GetFullDatabasePath();
using (FileStream fileStream = new FileStream(databasePath, FileMode.Open, FileAccess.Read))
{
MemoryStream memoryStream = new MemoryStream();
memoryStream.SetLength(fileStream.Length);
fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
return memoryStream;
}
}
相關問題
- 1. 單元測試測試
- 2. CakePHP測試 - 單元測試
- 3. 單元測試
- 4. 單元測試
- 5. 單元測試
- 6. 單元測試
- 7. 單元測試
- 8. 單元測試
- 9. 單元測試
- 10. 單元測試
- 11. 單元測試
- 12. 單元測試
- 13. 單元測試
- 14. 單元測試
- 15. 單元測試
- 16. 單元測試()
- 17. 單元測試
- 18. 單元測試
- 19. 單元測試
- 20. Simple單元測試簡單單元測試
- 21. 單元測試Url.Action
- 22. 當單元測試
- 23. 單元測試Observable.interval
- 24. 單元測試GetManifestResourceStream
- 25. 單元測試Scanf
- 26. 單元測試MvvmCross.Droid.View
- 27. 單元測試#ifdef
- 28. 單元測試iOS
- 29. 單元測試unityContainer.Resolve
- 30. DAO單元測試