在我的需求裡面,光有 UnitTest 是不夠的,我們還使用了 SpecFlow 做整合測試,接下來我們可以叫 Jenkins 幫我們執行 SpecFlow 的 Test。
專案從 NuGet 上安裝 SpecRun for SpecFlow
SpecFlow 可以使用 MsTest、NUnit 去執行測試,為了之後產生報表方便,我採用 SpecRun 來執行測試。
將方案的 packages.config 加入方案控制
這邊有點詭異,我在專案加入 SpecRun Runner 套件,但是 package 的資訊卻被放在 .nuget\packages.config
裡面,造成在 Build 專案的時候沒有將 SpecRun Runner restore 回來,runtests.cmd 執行時找不到 packages\SpecRun.Runner.1.2.0\tools\SpecRun.exe
。
添加建置步驟 - 執行 Windows 批次指令
還原 SpecRun Runner 套件
添加建置步驟 - 執行 Windows 批次指令
執行 runtests.cmd 帶入 Default 參數及產生報表的相對路徑
添加建置後動作 - Publish HTML reports
把輸出後的 TestReport\SpecReport.html 填入 Index page(s) 欄位,並且給它一個 Report title。
Demo
標準的 SpecFlow 報表
後記
過程中遇到一個小插曲,我得到了一個「'Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。」錯誤訊息,原因 Google 一下是少了「Microsoft Access Database Engine 2010 可轉散發套件」,下載安裝之後就搞定了。
另外,為何我要用 SpecRun 而不用 MsTest 原因我說明一下,是因為 MsTest 要產生 CodeCoverage 報表的步驟稍微繁雜了一些,而用 VsTest.Consolse 產生 CodeCoverage 報表輕鬆寫意,但是 VsTest.Consolse 產生的 TRX 檔案 Pickles 沒辦法支援,所以我只好迂迴了一下用 SpecRun 來執行 SpecFlow Test。