我有一堆所有实现接口的类,其中一个参数是StreamWriter。
我需要检查StreamWriter的内容。
我正试图找到一种方法来避免在测试服务器上编写文本文件并打开它们来检查内容。
是否有办法快速将StreamWriter内容/流转换为StringBuilder变量?
答案 0 :(得分:16)
您无法检查 StreamWriter
。您可以检查它正在写入的基础流。因此,您可以在单元测试中使用MemoryStream
并将此StreamWriter
指向它。一旦完成写作,你就可以从中读取。
[TestMethod]
public void SomeMethod_Should_Write_Some_Expected_Output()
{
// arrange
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
{
// act
sut.SomeMethod(writer);
// assert
string actual = Encoding.UTF8.GetString(stream.ToArray());
Assert.AreEqual("some expected output", actual);
}
}
答案 1 :(得分:11)
我建议您尽可能将参数更改为TextWriter
- 此时您可以使用StringWriter
。
或者,您可以在MemoryStream
周围创建StreamWriter
,然后稍后测试MemoryStream
的内容(通过倒回它,或者只是调用ToArray()
来获取完整的内容作为字节数组。如果你真的想测试 text ,那么使用StringWriter
肯定更简单。
答案 2 :(得分:2)
您可以将其替换为写入MemoryStream的StreamWriter。
答案 3 :(得分:1)
在这种情况下,您需要模拟测试用例。你可以使用像rhino mocks这样的框架。模拟框架的优点是,您可以验证对象的内容,但不必命中服务器或占用服务器资源。
此链接将为您提供基本示例:http://www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks