Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[iThome第8屆鐵人賽 18]OpenCover 結果 - html結果產生篇

在上篇了解到了測試涵蓋率的計算方式之後,已經可以了解xml報告的一些數字所代表的意思。

但是,xml畢竟不是那麼容易讀得懂,並且也不容易看出到底那些地方沒有測試到。

在這篇,將會介紹如何把xml結果產生出html結果,並且如何使用。

ReportGenerator - html結果產生工具

ReportGerator

能夠把多種coverage工具的xml結果產生html格式,其中就有包括open cover的格式

build script調整

基本上有以下幾個地方要調整:

  1. 把ReportGenerator安裝到build專案
  2. 在測試執行完的時候產生結果

安裝ReportGenerator

透過nuget先安裝ReportGenerator,再來在default.ps1裡面,建立一個property是代表reportGenerator的工具:

Properties{
....
$reportGeneratorExe = (Get-PackagePath $packageDirectoryPath "ReportGenerator") +
   "\tools\ReportGenerator.exe"
....
}  
  

在測試執行完成產生html結果

再來,有一個Test的task,這個task其實是在3個測試framework執行完才會執行。

因此可以在這邊多一個判斷,如果有產生出Coverage的xml的時候,在執行ReportGenerator。

這個Generator執行起來很容易,只需要傳入兩個參數:

  • openCover xml結果的路徑
  • 產生的html要放的路徑

因此整個task變成:

task Test -depends Compile, Clean, XunitTest, NunitTest, MSTest -description "執行Test" { 
 
 if(Test-Path $openCoverResult){
  Write-Host "`r`n產生測試涵蓋率報告 html 格式"
  exec{ &$reportGeneratorExe $openCoverResult $buildTestCoverageDirectory}
 } else {
  Write-Host "`r`n沒有產生測試涵蓋率報告"
 }

 Write-Host $testMsg
}

html結果介紹

當在執行build的時候,會在.\testCoverage裡面多出很多檔案,其中最重要的檔案就是Index.htm

如果把Index.htm執行起來,可以看到結果的總覽。

結果總覽

在index.htm的上半部,是整個結果的總覽。其中有個部分要注意的是,裡面用了Line Coverage這個詞,但是其實這邊指的是Sequence Point Coverage(在報告其他地方也是同理)

image
可以看到整個測試涵蓋率

Assembly執行結果

在Index.htm的下面則是Assembly執行的總覽,可以簡單看到那些涵蓋率是多少。

這邊有幾個可以使用的地方:

  1. Grouping - 可以切換如何group結果,只要用左右拖拉即可
  2. 排序 - 每一個表頭的三角形可以點做排序
  3. Filter - 可以過濾要看哪一個

image
Assembly總覽

Assembly詳細

如果選一個assembly,可以點進去看到底那邊有cover到,那邊沒有。

下面的例子是我們唯一有寫測試的地方,這個報告還會highlight出,那邊是測試點。如果沒涵蓋,會用紅色標註

image
Assembly詳細

其他呈現方式

ReportGenerator產生的html其實非常詳細,用來看結果其實非常容易發現沒測試到的地方。

不過或許會好奇還有沒有其他使用OpenCover的xml結果的方式,其實還有兩個地方:

  1. Coveralls - 如果有希望在網路上給大家看到測試涵蓋率,可以使用Coveralls這個網站服務 - 可以把這個整合到build script裡面,自動把結果發佈到上面
  2. OpenCover UI - VS 套件 - 這個是開發的時候可以使用的,能夠在VS工具裡面直接看到那段程式碼有沒有涵蓋,類似於VS 高版本裡面的Coverage工具呈現的樣子。

結語

透過這篇,對於測試涵蓋率和測試碼品質如何保證有個概念。

接下來會來看看另外一個角度來保證程式碼品質,也就是透過程式碼分析的方式來達到。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus