繁体   English   中英

如何使用OpenCover为MSBuild正确配置SonarQube扫描仪

[英]How to correctly configure SonarQube Scanner for MSBuild with OpenCover

我有很多项目的.NET解决方案。 我想使用SonarQube分析项目,并显示单元测试的详细信息。 我正在使用NUnit进行测试,并使用OpenCover生成覆盖率报告。 我有一个简单的batch文件,可以按顺序运行所需的SonarQube任务。

现在,我希望将某些装配排除在覆盖率分析和计算之外,而仅对一部分装配进行汇总分析。 我为此目的使用opencover filters ,但它们似乎不起作用。

假设我有类似的程序集

MyProject.ViewModels
MyProject.DomainModels
MyProject.Core
MyProject.CoreTests
My.Shared.Data
MyProject.Data.Tests
MyProject.Data.Console
MyShared.Console
UIModules.Services
UIModules.Services.UnitTests
UIModules.Web
UIModules.Web.Tests

为了处理它们,我有一个如下的batch文件。 我添加了一些filter以排除测试,模型和控制台程序集。

似乎过滤器无法正常工作。 SonarQube显示的代码覆盖率中,尽管不包括测试项目,但仍要考虑模型和控制台项目来进行总体覆盖率计算。

SonarQube.Scanner.MSBuild.exe begin /k:"key" /n:"My Project" /v:"1.0" /d:sonar.cs.nunit.reportsPaths="NUnitResults.xml" /d:sonar.cs.opencover.reportsPaths="opencover.xml"

REM build the project/solution
msbuild MyProject.sln /t:rebuild

REM run NUnit tests
"C:\Program Files (x86)\NUnit 2.6.4\bin\nunit-console.exe" /result=NUnitResults.xml Core\bin\Debug\MyProject.CoreTests.dll Data\bin\Debug\MyProject.Data.Tests.dll Services\bin\Debug\UIModules.ServicesTests.dll Web\bin\Debug\UIModules.Web.Tests.dll

REM run OpenCover coverage
"C:\Users\Me\AppData\Local\Apps\OpenCover\OpenCover.Console.exe" -register:user "-target:C:\Program Files (x86)\NUnit 2.6.4\bin\nunit-console.exe" "-targetargs:Core\bin\Debug\MyProject.CoreTests.dll Data\bin\Debug\MyProject.Data.Tests.dll Services\bin\Debug\UIModules.ServicesTests.dll Web\bin\Debug\UIModules.Web.Tests.dll /noshadow" "-output:opencover.xml" "-filter:+[MyProject*]* +[My.Shared*]* +[UIModules*]* -[*Tests]* -[*.Console]* -[*Models]*"

REM process end analysis
SonarQube.Scanner.MSBuild.exe end

有人可以指导我正确的方向。

不知道您在哪里寻找规则。 Coverage工具中的coverage筛选器规则应影响coverage的输出。

导入险种后,将应用其他规则。 Sonar Qube还有其他规则。 跑步者也可以内置过滤器规则。

一些跑步者可以忽略声纳设置。

由于您在谈论覆盖范围,因此我假设您想跳过测试数据。

为此,测试项目名称需要以一个或多个测试结尾。 在这里提到: https : //docs.sonarqube.org/display/SCAN/Miscellaneous+Advanced+Usages

我也倾向于排除我在声纳主机中设置的AssemblyInfo.cs。

Configuration -> Analysis Scope -> Global Source File Exclusions ,我的模式为**/AssemblyInfo.cs

我希望这可以帮助您入门。

我认为您应该将“其他”项目保留在未涵盖的范围之内,然后列出。 如果您真的想排除每个项目,则可以尝试将其他参数传递给声纳扫描仪,例如sonar.exclusions

跑步者可能会忽略sonar.exclusions 有关不同排除方法的启发,请参见以下答案

用于解析sonar.exclusions相对路径的根目录是每个.csproj文件的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM