2011-04-16 93 views
2

我在Visual Studio中有一個類庫,只是檢查指定文件是否存在。如果我只傳遞存在於bin目錄中的一些文本文件的文件名(沒有完整路徑),它可以通過識別它的存在而正常工作。NUnit從源文件讀取文件Bin

因此,如果myfile.txt位於bin目錄中,File.Exists(「myfile.txt」)將起作用。

但是,當我從NUnit GUI執行此方法加載測試用例時,它無法讀取文件。可能是因爲執行NUnit的bin目錄與dll和myfile.txt所在的原始bin不同。我如何在不使用硬編碼完整路徑的情況下在我的NUnit中解決這個問題?

回答

2

在你的測試中傳遞一個相對路徑到被測試的類的方法。這樣可以避免使用硬編碼的完整路徑,只要你的測試項目總是在相對於你的源項目的相同位置,它就可以工作。

例如如果你有你的源設置是這樣的:

\Solution\src\Project\bin\debug\myFile.txt 
\Solution\test\TestProject\bin\debug\TestAssembly.dll 

的相對路徑將是@"..\..\..\..\Project\bin\debug\myfile.txt"

更新

我不明白爲什麼你的測試是從一個臨時文件夾中運行。我要麼使用測試運行器(如Resharper),要麼設置我的測試項目如下:

  1. 打開包含測試項目的項目屬性。
  2. 轉到調試選項卡和設置以下值:
    • 啓動外部程序:輸入nunit.exe的位置,例如在我的電腦上安裝到C:\ Program Files \ NUnit 2.5.5 \ bin \ net-2.0 \ nunit.exe
    • 命令行參數:輸入包含您的測試的程序集名稱,後跟run參數,例如TestProject.dll /運行
  3. 將包含測試的項目設置爲啓動項目。
  4. 命中F5。

這樣您的測試總是從bin\debug運行(取決於您的構建配置),因此您可以依賴項目始終處於相同的相對位置。

+0

如何確保測試項目與源項目相關。當我運行NUnit GUI時,它會複製dll並在臨時文件夾中運行應用程序。 – helloworld 2011-04-17 07:52:36

+0

@enableDeepak我不直接運行NUnit GUI,請參閱我的更新瞭解我的作用 – Graham 2011-04-17 10:48:44

+1

@enableDeepak NUnit使用影子複製從臨時文件夾運行以避免鎖定dll。在NUnit2的早期版本中,這允許NUnit保持dll加載,但仍允許您重新編譯。這可能不再需要,我認爲有一個設置可以關閉它。檢入NUnit GUI的選項。 – 2011-04-17 10:57:45