2011-05-21 71 views
25

我有以下IntegrationTest項目結構...如何將此文件加載到NUnit測試中?

enter image description here

如果我想使用測試數據126.txtNUnit Test,我怎麼加載普通的txt文件的數據?

注意:該文件是-linked-,我正在使用c#(如圖所示)。

歡呼:)

回答

34

你可以在文件的屬性指定要複製到輸出文件夾和裏面的單元測試:

string text = File.ReadAllText("TestData\\126.txt"); 

作爲替代方案,你可以嵌入此文件作爲資源進入測試程序集,然後:

var assembly = Assembly.GetExecutingAssembly(); 
using (var stream = assembly.GetManifestResourceStream("ProjectName.Tests.IntegrationTests.TestData.126.txt")) 
using (var reader = new StreamReader(stream)) 
{ 
    string text = reader.ReadToEnd(); 
} 
+0

當然:) wikid :) totoally忘記了這一點。我還編輯了將文件夾包含在技術上正確的路徑。隊友的歡呼聲。非常感謝一如既往。 – 2011-05-21 13:11:53

+1

對於_alternative_方式,您需要將文件的「Build Action」設置爲「EmbeddedResource」,而不僅僅是「Resource」。 由於'WPF'以其他方式處理它,我感到困惑:[link](https://stackoverflow.com/questions/9419611/how-to-refer-to-embedded-resources-from-xaml) – Ghosthack 2017-08-08 11:20:34

+1

第一個方法在測試由ReSharper的測試運行器執行時不起作用。它試圖從「AppData \ Local \ JetBrains \ Installations \ ....」加載文件。如果使用nunit,解決方案是首先使用「TestContext.CurrentContext.TestDirectory」到正確的目錄。 – emirhosseini 2018-02-15 15:22:23

16

這個問題目前正在回答,但對於Google員工尋找其他的可能性:

如果你得到一個DirectoryNotFoundException,因爲測試在尋找C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common...而不是bin\Debug\...,這意味着你的測試適配器正在從一個不是你的測試項目輸出目錄的路徑執行。

using System.IO; 
using System.Reflection; 

// Get directory of test DLL 
var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

// dir is now "C:\...\bin\Debug" or wherever the executable is running from 

我扔的是,在測試項目中的TestHelpers靜態類,這樣我可以使用:

爲了解決這個問題,你可以通過查看測試DLL的目錄,像這樣拿到bin\Debug\...目錄它在每個需要加載外部文件的測試中。

代碼由this answer提供。

20

如果您不想將這些文件作爲ManifestResources,而只是作爲系統上的文件。更多資訊,並與評論答案見Trouble with NUnit when determining the assembly's directory:^^^^^這是正確的答案^^^^^

而且有意思的是,從NUnit的https://bugs.launchpad.net/nunit-vs-adapter/+bug/1084284/comments/3

的信息,但這裏是快速信息:

Path.Combine(TestContext.CurrentContext.TestDirectory, @"Files\test.pdf") 

文件所在\是檢驗.pdf在您的測試項目只是一個文件,以生成操作內容複製到輸出目錄拷貝是否有更新的

所有學分其他職位走出去的人,但花了我一段時間找到答案,這就是我爲這篇文章添加答案的原因。