在上篇了解到了測試涵蓋率的計算方式之後,已經可以了解xml報告的一些數字所代表的意思。
但是,xml畢竟不是那麼容易讀得懂,並且也不容易看出到底那些地方沒有測試到。
在這篇,將會介紹如何把xml結果產生出html結果,並且如何使用。
ReportGenerator - html結果產生工具
ReportGerator
能夠把多種coverage工具的xml結果產生html格式,其中就有包括open cover的格式
- Nuget - https://www.nuget.org/packages/ReportGenerator/
- Nuget 安裝指令 - Install-Package ReportGenerator
- Github - https://github.com/danielpalme/ReportGenerator
build script調整
基本上有以下幾個地方要調整:
- 把ReportGenerator安裝到build專案
- 在測試執行完的時候產生結果
安裝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
(在報告其他地方也是同理)
Assembly執行結果
在Index.htm的下面則是Assembly執行的總覽,可以簡單看到那些涵蓋率是多少。
這邊有幾個可以使用的地方:
- Grouping - 可以切換如何group結果,只要用左右拖拉即可
- 排序 - 每一個表頭的三角形可以點做排序
- Filter - 可以過濾要看哪一個
Assembly詳細
如果選一個assembly,可以點進去看到底那邊有cover到,那邊沒有。
下面的例子是我們唯一有寫測試的地方,這個報告還會highlight出,那邊是測試點。如果沒涵蓋,會用紅色標註
其他呈現方式
ReportGenerator產生的html其實非常詳細,用來看結果其實非常容易發現沒測試到的地方。
不過或許會好奇還有沒有其他使用OpenCover的xml結果的方式,其實還有兩個地方:
- Coveralls - 如果有希望在網路上給大家看到測試涵蓋率,可以使用Coveralls這個網站服務 - 可以把這個整合到build script裡面,自動把結果發佈到上面
- OpenCover UI - VS 套件 - 這個是開發的時候可以使用的,能夠在VS工具裡面直接看到那段程式碼有沒有涵蓋,類似於VS 高版本裡面的Coverage工具呈現的樣子。
結語
透過這篇,對於測試涵蓋率和測試碼品質如何保證有個概念。
接下來會來看看另外一個角度來保證程式碼品質,也就是透過程式碼分析的方式來達到。