[料理佳餚] 使用 Jenkins 執行自動化單元測試

  • 1910
  • 0
  • CI
  • 2015-12-14

專案可以透過 Jenkins 自動建置後,當然還是不滿足的,接下來要做的事是讓 Jenkins 可以跑單元測試及產生測試涵蓋率。

這裡要補充說明一下,由於我不是要單純跑建置及單元測試而已,我還需要執行一些分析的作業,所以我選擇在 Jenkins Server 上安裝 Visual Studio 較為省事。

安裝 Plugin

  1. MsTest
  2. VSTest Runner
  3. PostBuildScript

設定 VSTest Runner

給它一個響噹噹的名字,並設定 VSTest 的絕對路徑。

添加建置步驟 - Run unit tests with VSTest.console

選擇 VSTest 的版本,並指定 UnitTest 專案建置出來的 dll 檔案相對路徑,其它設定請參照下圖。

添加建置後動作 - Execute a set of scripts

在這邊我自行開發了兩支 Console 程式 TRXCopy、CoverageConverter。

  1. TRXCopy 是用來找到每次最新產出的 trx 報表,並複製到 workspace\TestResults 資料夾底下,因為 vstest.console.exe 產出的 trx 報表是隨機命名的,所以取得每次最新產出的 trx 報表並將它重新命名成指定固定的名稱。
  2. 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

測試結果涵蓋率趨勢圖

原始程式碼的測試結果涵蓋率分析

 

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學