C#单元测试StreamWriter参数

时间:2012-09-18 15:50:29

标签: c# unit-testing streamwriter

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

我需要检查StreamWriter的内容。

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

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

4 个答案:

答案 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