iT邦幫忙

DAY 7
1

使用Jenkins打造.Net CI Server系列 第 7

CI Server 07 - 單元測試涵蓋率

在判斷專案的單元測試狀況時,
單元測試涵蓋率也是一個不錯的參考指標,
它可以顯示目前單元測試的覆蓋狀況,
但並不是所有的專案都必須要有100%的單元測試覆蓋率,
而應該是針對重要邏輯一定要涵蓋到。
今天將向大家介紹如何使用Jenkins設定並整合單元測試涵蓋率報表。
※設定專案建置包含Code Coverage

  1. 打開Visual Studio,在方案檔上按滑鼠右鍵,選擇新增項目
  2. 新增測試設定檔 - Locat.testsettings
  3. 點選一般,修改使用者定義的配置,設定前置詞為TestResults
  4. 點選資料和診斷,將程式碼涵蓋範圍打勾
  5. 雙擊程式碼涵蓋範圍,將要計算測試涵蓋率的dll打勾
  6. 將Locat.testsettings一同Check in到版本控制系統中

※設定執行單元測試使用設定檔

  1. 回到Jenkins首頁,點選我們的專案My .Net Library,點選設定
  2. 新增測試參數指定使用設定檔 - /testsettings:Local.testsettings
  3. 這邊還要多設定一個MsTest參數,
    回到首頁點選左邊的管理Jenkins,再選擇設定系統
  4. 將omit Omit NoIsolation打勾

※設定轉換單元測試結果=>Xml
由於MsTest所產生的單元測試涵蓋率資料為二進位資料,
所以我們必須透過轉換工具將他轉為Xml,再透過Plun In來呈現測試涵蓋率的結果

  1. 取得轉換程式,並放置到C:\CI_Tools\CodeCoverageConverter下
    程式連結: http://sdrv.ms/R034IO
  2. 點選專案設定,找到Build區段,新增執行window batch command
  3. 使用指令轉換單元測試結果=>Xml
    "C:\CI_Tools\CodeCoverageConverter\CodeCoverageConverter.exe" TestResults coverage.xml
    第一個參數為上面設定的測試結果前置詞,第二個參數為產生的xml檔名

※將coverage.xml轉換為emma code coverage格式

  1. 取得msxsl.exe,以及xsl轉換檔,並放置到C:\CI_Tools下
    msxsl.exe程式連結: http://www.microsoft.com/en-us/download/details.aspx?id=21714
    MSTestCoverageToEmma.xsl程式連結: [url]http://sdrv.ms/ODQfEd[url]
  2. 點選專案設定,找到Build區段,新增執行window batch command
  3. 輸入指令,轉換coverage.xml => coverageResult.xml
    "C:\CI_Tools\msxsl.exe" coverage.xml "C:\CI_Tools\MSTestCoverageToEmma.xsl" -o coverageResult.xml
    第一個參數為輸入的Xml檔案,第二個參數為xsl轉換檔
    第三個參數為輸出的檔名

※使用Emma Code Coverage Plugin呈現結果

  1. 進入Jenkins首頁後,點選左邊的管理Jenkins,再選擇管理外掛程式
  2. 點選可用的,勾選Emma Coverage Column,並執行安裝
  3. 回到Jenkins首頁,點選我們的專案My .Net Library,點選設定
  4. 找到Post-build Actions區塊,點選Add Post-build Action,
    選擇Record Emma coverage report
  5. 輸入coverageResult.xml

※觀看結果

  1. 回到我們的專案首頁,可以看到出現測試涵蓋率圖表
  2. 點擊進去還可以看到更多細部的資料

※總結
透過單元測試涵蓋率報表,
我們可以清楚的看到每一隻Class的測試狀況,
還可以從Class、Method、Block、Line四種角度來查看,
檢查重要的邏輯是否有被測試到,
這也是作為提升程式碼品質以及維持程式碼穩定的好方法喔!
關於今天的分享,若有任何問題歡迎大家提問及討論! 掰掰


上一篇
CI Server 06 - 加入單元測試
下一篇
CI Server 08 - 設定每日建置
系列文
使用Jenkins打造.Net CI Server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
pajace2001
iT邦研究生 1 級 ‧ 2013-01-28 21:10:59

請問大大,

如果我是用 C++ 開發呢?
我是用 vstest.console.exe 來測試並且產生 code coverage 檔
我試過,要用 CodeCoverageConverter.vshost.exe 才可以通過
用 CodeCoverageConverter.exe 則會產生 InvalidCoverageFileException
可是我一直卡在 coverage.xml 產生不出來 ~~

0
pajace2001
iT邦研究生 1 級 ‧ 2013-01-29 13:59:54

已經解決了~~原來是 copy 指令下錯 XD

我要留言

立即登入留言