2011-12-01 27 views
4

我正在創建一個需要從本地目錄中按名稱查找文件(FileINeedToFind.cs)的c#類(Class.cs)。該目錄與類文件位於不同的目錄中。在單元測試期間檢索本地路徑

文件夾結構:

 
Root 
    -> ClassFolder 

     --> Class.cs 

    -> FileFolder 

     --> FileINeedToFind.cs 

當我運行該類的測試,它總是回來與試驗結果的路徑。

我怎樣才能讓類獲得自己的本地路徑,而不是測試結果程序集?

+0

你能更加明確**期待A **但**接受B **嗎? –

+0

我在找的是'C:\ Code \ ClassFolder \ Class.cs'。我得到的是'C:\ Code \ TestResults datetime \ Class.cs'。 – trambre

+0

關於它的最終解決方案? – Kiquenet

回答

2

當一個程序運行時,您應該假設一個對象沒有意識到生成它的源代碼。該代碼被編譯成一個程序集,並且該程序集在運行該程序時被加載,所以默認情況下「當前」目錄是執行程序集的位置。

總之,這不是你可以乾淨地做的事情。如果你的代碼不依賴源相關目錄的概念,那麼最好。如果您更改要查找的文件的構建操作,可能會幫助您實現目標,以便將其複製到輸出目錄。然後,該文件在運行時的相對路徑應鏡像項目文件夾中的相對路徑。

要獲得路徑執行大會(「當前」路徑可以由任何其他執行代碼進行更改,所以最好不要依賴於),使用此代碼:

System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase); 
3

在MSTest的,測試是(默認情況下)通過test deployment在與包含您的代碼的文件夾不同的文件夾中執行。您可以配置部署的內容,但我傾向於同意@Jacob這不是您通常想要執行的操作。

但是,我不同於@Jacob關於如何在測試中獲取當前目錄。在MSTest中,正確的方法是使用TestContext.DeploymentDirectory