C# Unit Test a StreamWriter parameter

前端 未结 3 531
梦谈多话
梦谈多话 2021-01-04 09:28

I have a bunch of classes that all implement an Interface and one of the parameters is a StreamWriter.

I need to check the contents of the StreamWriter.

I am

相关标签:
3条回答
  • 2021-01-04 09:41

    You cannot check the StreamWriter. You could check the underlying stream it is writing to. So you could use a MemoryStream in your unit test and point this StreamWriter to it. Once it has finished writing you could read from it.

    [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);
        }
    }
    
    0 讨论(0)
  • 2021-01-04 09:49

    I would suggest you change the parameter to TextWriter if at all possible - at which point you can use a StringWriter.

    Alternatively, you could create a StreamWriter around a MemoryStream, then test the contents of that MemoryStream later (either by rewinding it, or just calling ToArray() to get the complete contents as a byte array. If you really want to be testing text though, it's definitely simpler to use a StringWriter.

    0 讨论(0)
  • 2021-01-04 09:56

    In that case you need to mock the test case. You can use frameworks likes rhino mocks. That advantage of mocking framework is, you can verify the contents of the objects, but you don't have to hit server or occupy server resources.

    This link will provide you the basic examples: http://www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks

    0 讨论(0)
提交回复
热议问题