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?
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);
}
}
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With