Jenkins+ C# +單元測試+覆蓋率

姜志民 2018/04/10 16:03:35
1654

Jenkins+ C# +單元測試+覆蓋率


簡介

程式開發完成後,每次都用人工方式測試,既浪費時間又可能漏掉沒有測試到的程式邏輯,這是一個不科學的測試方法。接下來要介紹使用Jenkins +C# + NUnit(單元測試) + Cobertura(覆蓋率),來進行科學的測試。

作者

姜志民


一、準備商業邏輯程式

 
在類別庫專案中,撰寫一個簡單的程式如下:
 

二、準備單元測試程式

 
在單元測試專案中,撰寫一個程式,準備用來對DataService.cs做「單元測試+覆蓋度」使用的,程式如下:
 

三、準備軟體工具

 
下列的軟體會幫助產出的單元測試結果進行資料格式轉換、產生報表與覆蓋率:
 
NuGet:https://www.nuget.org
 
NUnit Console:http://nunit.org
 
OpenCover:https://github.com/OpenCover/opencover/releases
 
ReportGenerator:https://github.com/danielpalme/ReportGenerator/releases
 
OpenCoverToCoberturaConverter:https://www.nuget.org/packages/OpenCoverToCoberturaConverter
 
 

四、安裝Jenkins Plugin

 
安裝下列plugin,安裝成功如下圖:
a. HTML Publisher
 
b. Cobertura
 
c. NUnit
 

五、建置Free-Style軟體專案

 
輸入名稱並選擇「建置Free-Style軟體專案」。
 
 
 
設定將source code從Git取回。
 
 
 
下圖是進行程式編譯、單元測試結果進行資料格式轉換、產生報表與覆蓋率的腳本。
 
 
 
下圖為設定覆蓋率報表與單元測試結果的資料來源,此資料來源為上述的腳本。
 

六、單元測試與覆蓋率結果

 
執行建置後,可以看到多出好幾個項目,分別「HTML Report」、「Coverage Report」 與「最新測試結果 」。
 
 
 
進入Coverage Report項目如下圖,再進入DataClassLibrary。
 
 
 
再點選DataClassLibrary/DataService.cs
 

七、結論

 
相信各位讀者可以體會到自動化測試(單元測試+覆蓋率)的好處,可以讓軟體品質保持在一定水準之上。在專案開發執行過程中,常常都會聽到下列的對話:
 
 
PM大大:「A君你程式測試好了嗎?」
A君:「測試好了。」
PM大大:「A君你不是說程式已經測試好了,怎麼我一測就壞掉!」
A君:「我檢查一下。」
PM大大:「B君你這個程式之前不是可以執行,現在這麼壞掉不可以用了!」
B君:「可能之前程式邏輯有動到,我查查。」
 
 
在專案中,實行自動化測試(單元測試+覆蓋度),可以減少上述問題,專案管理人員可以從Jenkins的單元測試+覆蓋度報表,馬上知道有多少程式是沒有通過單元測試、有多少程式邏輯是沒有被執行到的,不需再向程式開發人員問詢程式測試狀況。
 
姜志民