C#unit testingStreamWriter参数

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

我需要检查StreamWriter的内容。

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

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

您无法检查 StreamWriter 。 您可以检查它正在写入的基础流。 因此,您可以在unit testing中使用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); } } 

如果可能的话,我建议您将参数更改为TextWriter – 此时您可以使用StringWriter

或者,你可以在MemoryStream周围创建一个StreamWriter ,然后测试该MemoryStream的内容(通过倒带或者只是调用ToArray()来获取完整的内容作为一个字节数组。如果你真的想测试文本虽然,使用StringWriter肯定更简单。

您可以将其替换为写入MemoryStream的StreamWriter。

在这种情况下,您需要模拟测试用例。 你可以使用像rhino mocks这样的框架。 模拟框架的优点是,您可以validation对象的内容,但您不必命中服务器或占用服务器资源。

此链接将为您提供基本示例: http : //www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks