2015-07-20 199 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]; 
} 
相關問題