Pur*_*ome 1 .net c# unit-testing mocking stream
我有以下代码我正在尝试编写单元测试:
// 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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我已经模拟了Open()
返回的Stream实例.这很简单.流对象也是一个MemoryStream
顺便说一句.
但我不知道如何设置ReadToEnd()
..以返回我的一些字符串内容.这是因为该StreamReader
实例对此方法是私有的.
我想提供一个可以设置的属性.
例如.
public string AStreamReader { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后这样做..
// 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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后只是StreamReader
通过该AStreamReader
属性传递模拟.
但我真的不想这样做.我觉得我正在泄漏一些内部逻辑,不一定......而且只是为了嘲笑!一个真正的用户永远不会设置..所以这感觉真的很脏.
请问任何人可以提供一些建议吗?
也许我错过了一些东西,但如果你能够嘲笑输入Stream
,为什么你需要嘲笑StreamReader
?
以下不适合您吗?
private string ReadFromResponseFiles(Stream[] inputs)
{
var rawContent = new StringBuilder();
foreach (var stream in inputs)
{
using (stream)
{
using (var streamReader = new StreamReader(stream))
{
rawContent.Append(streamReader.ReadToEnd());
}
}
}
return rawContent.ToString();
}
[Test]
public void Can_read_files()
{
var file1 = new MemoryStream(Encoding.UTF8.GetBytes("Foo"));
var file2 = new MemoryStream(Encoding.UTF8.GetBytes("Bar"));
var result = ReadFromResponseFiles(new[] { file1, file2 });
Assert.AreEqual("FooBar", result);
file1.Dispose();
file2.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
880 次 |
最近记录: |