Visual Studio 測試系列 : 部署測試需要用的檔案

在使用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>測試>選取現用測試設定中了解目前使用的設定

image

 

2. 打開目前方案使用的.testsettings檔案

image

 

3.在部署的頁籤中勾選啟用部署

image

 

其他設定造成自動啟用部署

我後來發現只要有勾選下列設定(我沒有全部試過),就算沒有勾啟用部署,Visual Studio測試工具還是啟用部署了,我就是有一次啟用了程式碼涵蓋範圍後,我原本有用到檔案的測試全部都失敗了,才發現這個問題。

image

 

沒有啟用部署時的設定

很簡單,只要在檔案屬性中啟用複製到輸出目錄就可以了。

image

 

image

但啟用部署後測試就會因為找不到檔案而失敗。

 

啟用部署時的設定

啟用部署時檔案的設定有二種,如下:

1. 在每一個TestMethod上設定

2. 在*.testsettings中做全域的設定

 

在每一個TestMethod上設定

在TestMethod上增加DeploymentItemAttribute,在執行測試時就會將檔案複製到{SolutionPath}\TestResuts\{命名規則}\Out中,但DeploymentItemAttribute設定的檔案同時要啟用複製到輸出目錄,因為測試工具是複製bin下的檔案到TestResults下。

image

不過要在每一個TestMethod設定同一個檔案很麻煩,所以可以考慮使用*.testsettings

 

在*.testsettings中做全域的設定

打開目前方案使用的.testsettings檔案,在部署的頁籤中加入檔案或資料夾,可以不用在每一個TestMethod中設定DeploymentItemAttribute。

image

 

個人的習慣

我個人會習慣開啟部署,因為有時候會把如程式碼涵蓋範圍打開,不希望一開始沒有設定好,造成要改一堆設定,而我會建立Deploys的資料夾,未來有要複製的檔案放在這個資料夾下就可以了,不用每一個檔案都設定,會方便很多。

image

 

註:小弟的經驗是更改了測試設定的任何一個值,Visual Studio 2010不會更動設定,必需關閉方案再載入方案才有效(Bug?)。

image_thumb11