我有一個使用StreamWriter寫入文件的類。嘲笑StreamWriter /確定何時模擬
public void CreateLog(string errorLogFilePath, StringBuilder errorLogBuilder, string errorMessage)
{
using (StreamWriter sw = new StreamWriter(errorLogFilePath, true)
{
errorLogBuilder.Apend("An error was discovered.");
//....
sw.Write(errorLogBuilder.ToString());
}
}
[問題]
1:是否有可能檢查.WRITE()方法被調用?
2:我是否需要在StreamWriter內部包裝MemoryStream才能測試它,而無需實際訪問硬盤驅動器。一個StreamWriters構造函數接受一個流,但它聲明以下內容+ UTF-8編碼是否會影響這個?
使用UTF-8編碼和默認緩衝區大小爲指定流初始化StreamWriter類的新實例。
3:如何確定一個類是否實際訪問hd並因此需要被模擬? (對不起,如果這最後一個問題聽起來很愚蠢,但我真的有點困惑於此)。
感謝您的回覆。關於(3),我指的是MemoryStream,StreamReader,StreamWriter等。你如何知道哪一個實際訪問HD?大約一個月前,我問了一個類似的問題,Jon Skeet說我可以在StreamReader中包裝一個memoryStream。爲什麼我不能在這裏做同樣的事情? –
@HansRudel你確實可以在這裏做同樣的事情(順便提一下,StreamWriter的構造函數可以讓你提供一個流*和*指定編碼),但是我發現這種方法更簡單。使用內存流創建StreamWriter將允許您在沒有模擬框架的情況下編寫測試,但是您使用了'moq'標記,那麼爲什麼不只是模擬抽象類呢? – phoog
@HansRudel我忘記了地址(3)。訪問HD的類是FileStream。當您將文件路徑而不是流傳遞給StreamWriter構造函數時,StreamWriter會創建一個FileStream。如果你有一個StreamWriter並想知道它正在寫什麼(文件,內存,其他),你應該能夠通過檢查它的BaseStream屬性來確定它。 – phoog