專案可以透過 Jenkins 自動建置後,當然還是不滿足的,接下來要做的事是讓 Jenkins 可以跑單元測試及產生測試涵蓋率。
這裡要補充說明一下,由於我不是要單純跑建置及單元測試而已,我還需要執行一些分析的作業,所以我選擇在 Jenkins Server 上安裝 Visual Studio 較為省事。
安裝 Plugin
- MsTest
- VSTest Runner
- PostBuildScript
設定 VSTest Runner
給它一個響噹噹的名字,並設定 VSTest 的絕對路徑。
添加建置步驟 - Run unit tests with VSTest.console
選擇 VSTest 的版本,並指定 UnitTest 專案建置出來的 dll 檔案相對路徑,其它設定請參照下圖。
添加建置後動作 - Execute a set of scripts
在這邊我自行開發了兩支 Console 程式 TRXCopy、CoverageConverter。
- TRXCopy 是用來找到每次最新產出的 trx 報表,並複製到 workspace\TestResults 資料夾底下,因為 vstest.console.exe 產出的 trx 報表是隨機命名的,所以取得每次最新產出的 trx 報表並將它重新命名成指定固定的名稱。
- CoverageConverter 是將 vstest.console.exe 產出的 *.coverage 檔案轉換成 Emma Plugin 可以使用的 xml 檔。
添加建置後動作 - Publish MSTest test result report
指定 trx 測試報表的相對路徑及名稱。
添加建置後動作 - Record Emma coverage report
指定給 Emma Plugin 的讀取來源 xml 檔案相對路徑及名稱。
為 EntityFramework 6.0+ 添加特殊程式碼
如果專案有使用到 Entity Framework 6.0+,在跑單元測試的時候會出現 'System.Data.SqlClient' ADO.NET provider could not be loaded.
的錯誤訊息,這時候請在任一 TestClass 的建構式內加入下面這一串程式碼。
public TestClass()
{
var _ = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Demo
測試結果涵蓋率趨勢圖
原始程式碼的測試結果涵蓋率分析