通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0%

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告.

我在本地有一个包含单元测试项目(大家可以自己建一个包含单元测试的项目,关于单元测试前面章节也有详细讲解,这里不再赘述).进入包含项目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项目

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

通过上图我们可以看到mytest项目的单元测试覆盖率为56.7%

我们进入mytest这个项目,然后点击单元测试覆盖率数字下面的链接

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

点击后进入以下页面:

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

通过这个界面,我们可以看到每一个类的的单元测试覆盖率和未覆盖的行数.我们点击类名,便可以进入具体的类.

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

这个图中,蓝杠部分为单元测试覆盖到的代码,红框部分则为未覆盖到的代码.

代码大视窗显示.

对于管理员来说,可能仅仅需要大致浏览一下代码,然后告知具体开发者需要修改.对于开发者来说,可能需要详细查看代码.以上截图只截了主视窗,实际上左侧还有固定的导航栏.这样对于查看代码可能不是很友好,详细查看代码的时候我们可能想在更大的视窗里查看.这时候我们可以点击右上角的"四杠图标"

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

选择open in new window便可以在新窗口中打开代码.此时整个区域都是代码,无关的内容都没了

.net持续集成sonarqube篇之 sonarqube集成单元测试-LMLPHP

07-27 15:07