我正在創建一個需要從本地目錄中按名稱查找文件(FileINeedToFind.cs)的c#類(Class.cs)。該目錄與類文件位於不同的目錄中。在單元測試期間檢索本地路徑
文件夾結構:
Root -> ClassFolder --> Class.cs -> FileFolder --> FileINeedToFind.cs
當我運行該類的測試,它總是回來與試驗結果的路徑。
我怎樣才能讓類獲得自己的本地路徑,而不是測試結果程序集?
我正在創建一個需要從本地目錄中按名稱查找文件(FileINeedToFind.cs)的c#類(Class.cs)。該目錄與類文件位於不同的目錄中。在單元測試期間檢索本地路徑
文件夾結構:
Root -> ClassFolder --> Class.cs -> FileFolder --> FileINeedToFind.cs
當我運行該類的測試,它總是回來與試驗結果的路徑。
我怎樣才能讓類獲得自己的本地路徑,而不是測試結果程序集?
當一個程序運行時,您應該假設一個對象沒有意識到生成它的源代碼。該代碼被編譯成一個程序集,並且該程序集在運行該程序時被加載,所以默認情況下「當前」目錄是執行程序集的位置。
總之,這不是你可以乾淨地做的事情。如果你的代碼不依賴源相關目錄的概念,那麼最好。如果您更改要查找的文件的構建操作,可能會幫助您實現目標,以便將其複製到輸出目錄。然後,該文件在運行時的相對路徑應鏡像項目文件夾中的相對路徑。
要獲得路徑執行大會(「當前」路徑可以由任何其他執行代碼進行更改,所以最好不要依賴於),使用此代碼:
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
在MSTest的,測試是(默認情況下)通過test deployment在與包含您的代碼的文件夾不同的文件夾中執行。您可以配置部署的內容,但我傾向於同意@Jacob這不是您通常想要執行的操作。
但是,我不同於@Jacob關於如何在測試中獲取當前目錄。在MSTest中,正確的方法是使用TestContext.DeploymentDirectory。
你能更加明確**期待A **但**接受B **嗎? –
我在找的是'C:\ Code \ ClassFolder \ Class.cs'。我得到的是'C:\ Code \ TestResults datetime \ Class.cs'。 – trambre
關於它的最終解決方案? – Kiquenet