在使用Visual Studio的測試工具測試時,常常會搭配一些檔案一起測試,因為不希望測試Method直接變動到為了測試準備的原始檔案,通常會複製原始檔案到測試的目錄中,本篇說明如何使用Visual Studio的測試工具部署檔案,並說明Visual Studio測試工具部署檔案時常撞邪的地方。
在使用Visual Studio的測試工具測試時,常常會搭配一些檔案一起測試,因為不希望測試Method直接變動到為了測試準備的原始檔案,通常會複製原始檔案到測試的目錄中,本篇說明如何使用Visual Studio的測試工具部署檔案,並說明Visual Studio測試工具部署檔案時常撞邪的地方。
為什麼設定了複製到輸出目錄,還是沒有找到檔案?
Visual Studio測試工具中啟用部署與沒有啟用部署,除了複製檔案的設定不一樣外,還有路徑也會有所不同,這是剛開始使用測試工具最容易搞不清楚的地方(我自己也是摸了一陣子才了解規則),以下先做簡單的說明了二者的差異。
差異 | 啟用部署 | 沒有啟用部署 |
---|---|---|
檔案位址 | 檔案會複製到{SolutionPath}\TestResuts\{命名規則}\Out中 | 檔案會複製到{TestProjectPath}\bin中 |
DataSourceAttribute | 所需的檔案必需要在上列資料夾中 | 所需的檔案必需要在上列資料夾中並加上|DataDirectory| |
System.AppDomain.CurrentDomain.BaseDirectory System.Reflection.Assembly.GetExecutingAssembly().CodeBase |
同等於上列資料夾 | 同等於上列資料夾 |
System.Environment.CurrentDirectory System.IO.Path.GetFullPath |
同等於上列資料夾 | {SolutionPath}\TestResuts\{命名規則}\Out |
設定 |
設定方式有2種 1. 在*.testsettings中設定 2. 在Method上加上DeploymentItemAttribute |
在檔案屬性中設定複製到輸出目錄 |
可能造成的影響 | 如果組件的Config沒有設定部署,會讓組件找不到Config而出錯,如nhibernate.cfg.xml或nlog.config | 無 |
如何啟用部署
1. 可以在Menu>測試>選取現用測試設定中了解目前使用的設定
2. 打開目前方案使用的.testsettings檔案
3.在部署的頁籤中勾選啟用部署
其他設定造成自動啟用部署
我後來發現只要有勾選下列設定(我沒有全部試過),就算沒有勾啟用部署,Visual Studio測試工具還是啟用部署了,我就是有一次啟用了程式碼涵蓋範圍後,我原本有用到檔案的測試全部都失敗了,才發現這個問題。
沒有啟用部署時的設定
很簡單,只要在檔案屬性中啟用複製到輸出目錄就可以了。
但啟用部署後測試就會因為找不到檔案而失敗。
啟用部署時的設定
啟用部署時檔案的設定有二種,如下:
1. 在每一個TestMethod上設定
2. 在*.testsettings中做全域的設定
在每一個TestMethod上設定
在TestMethod上增加DeploymentItemAttribute,在執行測試時就會將檔案複製到{SolutionPath}\TestResuts\{命名規則}\Out中,但DeploymentItemAttribute設定的檔案同時要啟用複製到輸出目錄,因為測試工具是複製bin下的檔案到TestResults下。
不過要在每一個TestMethod設定同一個檔案很麻煩,所以可以考慮使用*.testsettings
在*.testsettings中做全域的設定
打開目前方案使用的.testsettings檔案,在部署的頁籤中加入檔案或資料夾,可以不用在每一個TestMethod中設定DeploymentItemAttribute。
個人的習慣
我個人會習慣開啟部署,因為有時候會把如程式碼涵蓋範圍打開,不希望一開始沒有設定好,造成要改一堆設定,而我會建立Deploys的資料夾,未來有要複製的檔案放在這個資料夾下就可以了,不用每一個檔案都設定,會方便很多。
註:小弟的經驗是更改了測試設定的任何一個值,Visual Studio 2010不會更動設定,必需關閉方案再載入方案才有效(Bug?)。