c# - 使用流编写器集成测试功能

标签 c# unit-testing stream filesystems nunit

我有一个简短的问题要问你们,因为我在使用 C# 集成测试流编写器时遇到了一些问题。在我目前的位置,我们认为任何涉及文件系统的单元测试都是失败的,不确定它如何叠加到其他地方,因为这实际上是我的第一个编码位置,但这里就是这种情况。这导致我在读取文本文件时更多地使用流而不是 File.IO,因为我可以这样做:

private void ReadMe(Stream stream)
{
    using (var reader = new StreamReader(stream))
    {
        //do stuff
    }
}

这让我可以在集成测试期间投入内存流并将自己从文件系统中解放出来。但是,这不会扩展到文件的写入。例如:

private void WriteMe(Stream stream)
{
    using (var reader = new StreamWriter(stream))
    {
        //do stuff
    }
}

这将在我有机会看到写入的内容之前Dispose 流,因为它确实应该这样做。可悲的是,这意味着我必须将我的写作转移到通常太简单而无需测试的小而简单的函数中,这有点烦人且难以阅读。我在办公室四处打听,但从来没有人费心去寻找解决这个问题的方法,我只是想知道是否有一种方法可以将内存流提供给作者,并实际保留所写内容以供日后剖析.任何帮助将不胜感激!

最佳答案

你不需要做任何事。

StreamReader 被释放时,MemoryStream 也会被释放,但是它不会删除它的内容,所以你仍然可以做 MemoryStream.ToArray() ;

我能想到的唯一问题是,对于每个测试,您都应该创建一个新的 MemoryStream

关于c# - 使用流编写器集成测试功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23955835/

相关文章:

c# - 检查日期等于月份的第一个日期 C#

C# - 编写通用方法来处理位操作

c# - 从字符串 ascii 转换为字符串 Hex

c# - Entity Framework TDD,如何对所需字段进行单元测试模型

java - 如何测试Java中的IO问题?

stream - 如何理解Modelica模型中的Instream算子?

python - pyAudio 在调用 start_stream 之前开始流式传输

c# - 使用 MySql.Data.EntityFrameworkCore 包进行 TINYINT 或 BIT 类型映射时遇到问题

c - 如何在 C 语言中对性能优化进行单元测试?

C++ fstream 在 .txt 文件上总是失败