在C#项目中包含用于单元测试的资源文件

Yos*_*ale 12 c# unit-testing assemblies

我有一些函数可以读取和修改文件.为了使单元测试独立于任何文件系统问题,我想将文件包含在项目中.

但是,我的函数应该是获取filePath,而我从程序集中获得的只是一个FileStream.知道如何在项目中获取资源文件的文件路径吗?

System.Reflection.Assembly a = System.Reflection.Assembly.Load(assemblyName);
FileStream stream = a.GetFile(assemblyName + "." + fileName);
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mor*_*dur 8

我对此问题的通常解决方案是我重构我的程序以在调用方法中打开文件然后传递Stream而不是传递文件名并在那里打开文件.

为了测试,这允许我传递一个MemoryStream,这样我就可以在不使用文件系统的情况下编写单元测试.有时甚至更容易检查数据是否已正确写入并且速度更快,尤其是对于更多数量的测试.您必须记住在写入后刷新MemoryStream,因为.NET并不总是自动执行此操作.

我的一个程序示例:

public TestSaveAndLoad()
{
  [... create data to save ...]
  using (MemoryStream targetStream = new MemoryStream())
  {
    target.Save(targetStream);
    targetStream.Flush();
    targetStream.Seek(0, ...);
    target.Load(targetStream);
  }
  [... assert that the loaded data equals the saved data ...]
}
Run Code Online (Sandbox Code Playgroud)