2014-03-04 92 views
1

我想單元測試一些解壓縮代碼。我正在將測試文件放入要用於測試的項目中。我可以在控制檯應用程序中運行代碼,它運行良好,但是當我運行測試時,它們會失敗。NUnit測試沒有讀取項目文件

測試:

public void CsvStreamsToCsvStream() 
    { 
     string dir = System.IO.Path.GetDirectoryName(
     System.Reflection.Assembly.GetExecutingAssembly().Location); 

     string file = Path.Combine(dir, @"\TestFiles\Test.csv"); 
     using (FileStream fstrm = new FileStream(file, FileMode.Open)) 
     { 
     var decompressor = 
      new MemoryDecompresser(fstrm, Path.GetFileName(file)); 
     var results = decompressor.GetStreams(); 
     Assert.AreEqual(1, results.Count()); 
     Assert.AreEqual(results.First().Key, "Test.csv"); 

     } 
    } 

的控制檯應用程序:

namespace TestConsoleApp 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     var test = new TestDecompression(); 
     test.CsvStreamsToCsvStream(); 
    } 
    } 
} 

項目: enter image description here

測試資源管理器: enter image description here

+0

忽略這個如果這是一個愚蠢的建議,但可能是因爲測試是在一個子文件夾? – Ben

+0

感謝您的建議@Ben,我認爲它更像是nUnit正在爲我的文件而不是組裝路徑查找C根 –

+1

您的執行程序集*是測試運行程序。因此,使用'GetExecutingAssembly()'檢索的位置與您的控制檯應用程序中的位置不同。嘗試使用'System.Reflection.Assembly.GetAssembly(typeof(TestDecompression))。Location'來代替。 –

回答

0

嵌入資源

enter image description here

訪問資源小瓶 「GetManifestResourceStream(串)」 與大會名稱。文件夾名稱。文件名

[Test] 
    public void CsvStreamsToCsvStream() 
    { 
     using(Stream fstrm = 
       Assembly.GetExecutingAssembly() 
       .GetManifestResourceStream(@"Tests.TestFiles.Test.csv")) 
     { 
     var decompressor = 
      new MemoryDecompresser(fstrm, "Test.csv"); 
     var results = decompressor.GetStreams(); 
     Assert.AreEqual(1, results.Count()); 
     Assert.AreEqual(results.First().Key, "Test.csv"); 

     } 
    }