2015-07-20 87 views
0

我用UnitTesting的某些数据转储了一个文件。 当代码尝试加载文件时,它会得到FileNotFoundException。File.Exists在UnitTest上下文中返回false

数据和代码文件在同一文件夹中彼此相邻。

  • Project.Test
    • data.xml中
    • data.cs
+1

我只想指出,如果你正在从磁盘读取,你不写一个单元测试。单元测试在内存中运行,所有外部资源应该使用测试双抽象(自制或通过框架) – kai

回答

2

看来,测试项目需要在bin /调试编译后的文件复制夹。只有当您将“复制到输出目录”属性设置为“复制始终”。

1

我不知道这是否适合您的目的,但我经常会将样本/数据/其他文件包含为嵌入式资源。如果您选择这样做,您仍然需要在解决方案资源管理器中的文件上设置Build Action属性,但您不必担心文件位于何处或存在。

下面是一个读取文件的示例方法。我建议将方法更改为字符串,XDocument或其他更合适的格式(如果它适合您的数据类型)。 resource将成为文件的项目路径(即上例中的Project.Test.data.xml)。

private byte[] GetEmbeddedResourceBytes(string resource) 
{ 
    var asm = Assembly.GetExecutingAssembly(); 
    using (var stream = asm.GetManifestResourceStream(resource)) { 
     if (stream != null) { 
      byte[] buffer = new byte[16 * 1024]; 
      using (MemoryStream ms = new MemoryStream()) { 
       int read; 
       while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) { 
        ms.Write(buffer, 0, read); 
       } 
       return ms.ToArray(); 
      } 
     } 
    } 
    return new byte[0]; 
} 
相关问题