我有下面的代碼我試圖寫一個單元測試:我該如何模擬這個.NET代碼?
// Grab all of the content.
var rawContent = new StringBuilder();
foreach (var fileInfo in response.Files)
{
using (var stream = fileInfo.VirtualFile.Open())
{
using (var streamReader = new StreamReader(stream))
{
rawContent.Append(streamReader.ReadToEnd());
}
}
}
現在,我已經嘲笑流實例Open()
回報。這很容易。流對象也是MemoryStream
,順便說一句。
但我不知道如何設置ReadToEnd()
..返回一些我有的字符串內容。這是因爲StreamReader
實例對此方法是私有的。
我想提供一個可以設置的屬性。
例如。
public string AStreamReader { get; set; }
然後做這個..
// Grab all of the content.
var rawContent = new StringBuilder();
foreach (var fileInfo in response.Files)
{
using (var stream = fileInfo.VirtualFile.Open())
{
using (var streamReader = AStreamReader ?? new StreamReader(stream))
{
rawContent.Append(streamReader.ReadToEnd());
}
}
}
,然後剛好路過一個模擬StreamReader
通過AStreamReader
財產。
但我真的不想這樣做。我覺得我正在泄漏一些內部邏輯,不一定......只有嘲笑!一個真正的用戶永遠不會設置..所以這感覺像一個非常骯髒的事情。
請問有人能提供一些建議嗎?
難道你不能把你想要返回的數據放在你嘲笑的內存流中嗎? –
@JohnKoerner正好。 'StreamReader.ReadToEnd'調用基礎流上的'.Read'。如果你能嘲笑這個流,請模擬'Read'。 – dcastro