如何解决单元测试System.IO.FileStream
| 有谁知道我该如何为包含FileStream的功能编写单元测试?解决方法
围绕您实际尝试测试的内容提供更多的上下文将很有帮助。您是否在尝试解析流/将其写入流/其他内容?
最好的选择是让该函数使用Stream而不是FileStream。这样,在测试中,您可以使用内存中的流并为其提供所需的数据,而不必在文件系统上创建测试文件。这是有益的,因为您的测试将运行得更快,并且不会依赖于计算机状态,也不需要具有与系统相关的安装/拆卸代码。
通常,您的系统中应该有很少的组件可以直接与文件系统/数据库/ etc通信。实际上,您所追求的只是一个Stream或更高级别的对象,而该对象恰好保存在某个文件中。
,嗯,这不再是单元测试,而是集成测试,因为您依赖于外部系统=>文件系统。因此,您可以将参数作为文件的路径传递给方法,然后为测试项目重新创建一些示例文件,然后在该文件上声明内容。您可以使用相对的文件名,并将文件标记为“始终复制”,以便为每次测试迭代部署该文件。
,如果使用此处显示的IDbFileIo接口进行分类,则可以使模拟内存流返回值,而不是加载实际文件。
public interface IDbFileIo
{
MemoryStream LoadFile();
}
...实施
public MemoryStream LoadFile()
{
string databasePath = _pathInfo.GetFullDatabasePath();
using (FileStream fileStream = new FileStream(databasePath,FileMode.Open,FileAccess.Read))
{
MemoryStream memoryStream = new MemoryStream();
memoryStream.SetLength(fileStream.Length);
fileStream.Read(memoryStream.GetBuffer(),(int)fileStream.Length);
return memoryStream;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。