C#单元测试StreamWriter参数

Yog*_*ise 12 c# unit-testing streamwriter

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

我需要检查StreamWriter的内容.

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

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

Dar*_*rov 18

您无法查询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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `StreamWriter`默认使用UTF-8,因此应该使用什么来获得`actual`. (3认同)

Jon*_*eet 12

我建议您TextWriter尽可能将参数更改为- 此时您可以使用a StringWriter.

或者,你可以创建一个StreamWritera MemoryStream,然后测试它的内容MemoryStream(通过倒带,或者只是调用ToArray()将完整的内容作为字节数组.如果你真的想要测试文本,那么使用它肯定更简单a StringWriter.

  • @ user295734:任何*using*它仍然可以传入一个`StreamWriter` - 但如果你真的只想要一些你可以写文本的东西,`TextWriter`几乎肯定是一个更好的抽象使用.你应该只需要改变界面的*implementation*......我希望它们没问题. (4认同)