12

我有一堆类都实现了一个接口,其中一个参数是 StreamWriter。

我需要检查 StreamWriter 的内容。

我试图找到一种方法来避免在测试服务器上写入文本文件并打开它们来检查内容。

有没有办法快速将 StreamWriter 内容/流转换为 StringBuilder 变量?

4

3 回答 3

20

您无法检查. 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);
    }
}
于 2012-09-18T15:53:44.763 回答
13

我建议您将参数更改为TextWriterif at all possible - 此时您可以使用StringWriter.

或者,您可以在 aStreamWriter周围创建 a MemoryStream,然后稍后测试它的内容MemoryStream(通过倒带它,或者只是调用ToArray()以将完整内容作为字节数组获取。如果您真的想测试文本,那么使用起来肯定更简单一个StringWriter

于 2012-09-18T15:54:12.503 回答
0

在这种情况下,您需要模拟测试用例。你可以使用像 rhino mocks 这样的框架。mocking 框架的那个优点是,你可以验证对象的内容,但你不必打服务器或占用服务器资源。

此链接将为您提供基本示例: http: //www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks

于 2012-09-18T15:56:40.680 回答