我有一堆类都实现了一个接口,其中一个参数是 StreamWriter。
我需要检查 StreamWriter 的内容。
我试图找到一种方法来避免在测试服务器上写入文本文件并打开它们来检查内容。
有没有办法快速将 StreamWriter 内容/流转换为 StringBuilder 变量?
我有一堆类都实现了一个接口,其中一个参数是 StreamWriter。
我需要检查 StreamWriter 的内容。
我试图找到一种方法来避免在测试服务器上写入文本文件并打开它们来检查内容。
有没有办法快速将 StreamWriter 内容/流转换为 StringBuilder 变量?
您无法检查. StreamWriter
您可以检查它正在写入的底层流。因此,您可以MemoryStream
在单元测试中使用 a 并将其指向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);
}
}
我建议您将参数更改为TextWriter
if at all possible - 此时您可以使用StringWriter
.
或者,您可以在 aStreamWriter
周围创建 a MemoryStream
,然后稍后测试它的内容MemoryStream
(通过倒带它,或者只是调用ToArray()
以将完整内容作为字节数组获取。如果您真的想测试文本,那么使用起来肯定更简单一个StringWriter
。
在这种情况下,您需要模拟测试用例。你可以使用像 rhino mocks 这样的框架。mocking 框架的那个优点是,你可以验证对象的内容,但你不必打服务器或占用服务器资源。
此链接将为您提供基本示例: http: //www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks