C# Unit Test a StreamWriter parameter

Yogurt The Wise picture Yogurt The Wise · Sep 18, 2012 · Viewed 7.5k times · Source

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 trying to find a way to avoid writing text files on the test server and opening them to check the contents.

Is there is a way to quickly convert the StreamWriter contents/stream to a StringBuilder variable?

Answer

Darin Dimitrov picture Darin Dimitrov · Sep 18, 2012

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);
    }
}