2011-04-14 211 views

回答

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; 
    } 
}