1. 程式人生 > >.net持續整合sonarqube篇之 sonarqube整合單元測試

.net持續整合sonarqube篇之 sonarqube整合單元測試

系列目錄

通過前面章節我們可以看到,不論怎麼構建,單元測試覆蓋率一欄總是0%

這是因為單元測試覆蓋率報告需要額外整合.這一節我們就講解如何在sonarqube裡整合單元測試覆蓋率報告.

這裡需要藉助Opencover來生成單元測試覆蓋報告文件,Opencover前面章節我們介紹過,不瞭解的朋友可以檢視一下前面相關部分的章節.

我在本地有一個包含單元測試專案(大家可以自己建一個包含單元測試的專案,關於單元測試前面章節也有詳細講解,這裡不再贅述).進入包含專案sln或者csproj的檔案,執行以下命令.

MSBuild.SonarQube.Runner.exe begin /k:"mytest" /n:"mytest" /v:"v1.0" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"

msbuild.exe

"E:\personalproject\newTest2018\ConsoleApp1\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\bin\Debug\NunitTest.dll"

MSBuild.SonarQube.Runner.exe end

Begin 和end是固定格式,這裡begin部分多了一個/d選項,/d為dynamic properties 動態屬性.通過動態屬性指定單元測試報告的位置.%CD%即為當前目錄

第二段 msbuild.exe執行構建.
第三段 這裡是生成單元測試覆蓋率報告的關鍵. 首先指定Opencover所在位置,-register user 為註冊當前windows使用者以使其有許可權執行.-output 指定覆蓋率檔案輸出位置,這裡必須和上面的 sonar.cs.opencover.reportsPaths保持一致. -target為要指定的單元測試runner,這裡使用的是visual studio自帶的vstest.console.exe targetargs指定要進行單元測試的目標dll.

執行完成以後,我們再開啟sonarqube web管理介面就會看到剛剛生成的mytest專案

通過上圖我們可以看到mytest專案的單元測試覆蓋率為56.7%

我們進入mytest這個專案,然後點選單元測試覆蓋率數字下面的連結

點選後進入以下頁面:

通過這個介面,我們可以看到每一個類的的單元測試覆蓋率和未覆蓋的行數.我們點選類名,便可以進入具體的類.

這個圖中,藍槓部分為單元測試覆蓋到的程式碼,紅框部分則為未覆蓋到的程式碼.

程式碼大視窗顯示.

對於管理員來說,可能僅僅需要大致瀏覽一下程式碼,然後告知具體開發者需要修改.對於開發者來說,可能需要詳細檢視程式碼.以上截圖只截了主視窗,實際上左側還有固定的導航欄.這樣對於檢視程式碼可能不是很友好,詳細檢視程式碼的時候我們可能想在更大的視窗裡檢視.這時候我們可以點選右上角的"四槓圖示"

選擇open in new window便可以在新視窗中開啟程式碼.此時整個區域都是程式碼,無關的內容都沒了

以上程式碼雖然在一個單獨的視窗裡顯示,但是仍然有藍槓和紅槓標識,有些童鞋可能感覺不是很舒服,想要看到清潔程式碼,此時點選四框圖示選擇Show raw source即可顯示原始程式碼.