2013-05-16 89 views
13

我試圖在單元測試期間訪問我的解決方案結構中的文件。我的單元測試項目有bin\Debug\作爲輸出目錄。所以我寫了代碼,假設我的單元測試中的Path.GetFullPath(".")會給我這個bin文件夾。但它所做的是給我一個臨時位置作爲路徑。如何使單元測試在bin文件夾中運行

C:\Users\[username]\AppData\Local\Temp\TestResults\[username]_[machine_name] 2013-05-16 08_31_07\Out 

因此,顯然我的單元測試無法訪問我的解決方案中的文件。如果有人知道如何在單元測試項目的bin文件夾中運行單元測試,請幫忙。

回答

11

您可以通過使用.runsettings文件並設置<DeploymentEnabled>false</DeploymentEnabled>來完成此操作。請參閱「備註」部分here。但是,如果您正在使用.testsettings文件,並且如果您希望能夠檢查測試在運行失敗後讀取或寫入的任何文件,則無法執行此操作,您可能無法執行此操作,因爲它們可能是受到進一步測試等因素的影響。

另一個選擇是使用部署項目,可以通過DeploymentItemAttribute或通過.testsettings文件完成。屬性機制優先,基本上,在你需要爲你做下面的部署文件的測試方法:

[DeploymentItem(@"source", @"target")] 
public void Test1() {} 

是一個相對要麼路徑生成輸出文件夾,或絕對路徑,並且目標是相對於測試運行的路徑或絕對路徑。您可以保留目標參數,在這種情況下,它將假設目標爲「。」,即測試運行的文件夾。此文檔是here

+1

感謝您的回覆。可能是我沒有明確提出我的問題。我想在bin \ debug文件夾中運行單元測試,而不是在臨時位置。因爲在單元測試期間,我將創建一個將由我的應用程序使用的文件。爲此,我需要在單元測試期間訪問解決方案中的其中一個文件夾。由於單元測試運行在一個動態的臨時位置,所以很難實現。 – Geethanga

+0

查看第一部分...「 false」,以及有關運行設置文件的文檔。這將允許您在bin \ Debug文件夾中運行。 – guysherman

+0

非常感謝!在我的.testsettings中禁用DeploymentEnabled,並通過[DeploymentItem(TestDataFolder,「TestData」)]進行部署。 –

2

另一個可能適合您的選項是使用NUnit而不是MSTest。 在這種情況下,測試在bin \ debug目錄中執行

+1

這不是真的,我試過這個,我喜歡同樣的行爲。愛被證明是錯誤的。如果您使用MsTest或NUnit,則無關緊要。 – IbrarMumtaz

+2

我建議你創建一個示例解決方案(與我一樣)來證明它(如果需要任何幫助,我很樂意將源代碼郵寄給你)。我跑了2個版本 - 1個在mstest和1個在nunit。當在nunit中運行時,這是我得到的 - 「D:\ work \ rampup \ nunit-test \ NunitTest \ NunitTest \ bin \ Debug」,而在mstest中這是我得到的 - 「C:\ Users \ ron \ AppData \ Local \ Temp \ TestResults \ ron_RON-PC 2013-07-29 16_38_27 \ Out「 –

+0

」看起來像個好地方!將不得不嘗試也許我的家庭開發環境沒有正確設置,也許我不知道。 – IbrarMumtaz

-1

如果您試圖訪問您假定位於默認文件夾中的文件或資源,則可以嘗試爲它們提供程序集位置的顯式目錄。舉個例子:

string dataSource = AppDomain.CurrentDomain.BaseDirectory + "TestDb.mdb"; 

AppDomain.CurrentDomain.BaseDirectory通常決定於實際裝配的位置,這正是你打算。

1

這是針對使用Visual Studio 2015可能遇到此問題的任何人的更新。與@guysherman一致,我的解決方案資源管理器中的Solution文件下有一個Solution Items文件夾,並且應該有一個.testrunco​​nfig文件。如果您使用Visual Studios打開它,啓用部署是頂部的複選框,您可以取消選中。

我有同樣的問題,我的測試每次運行單元測試時將.dll部署到TestRun文件夾,但包含在可執行文件中的.config文件引用另一個common.config,但未部署一切,所以我從來沒有連接到我的SQL服務器,因爲它是在common.config中指定的。取消選中「啓用部署」選項,直接從項目中指定的bin文件夾運行我的測試。

相關問題