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

时间:2018-03-10 08:37:39

标签: c# msbuild sonarqube sonarqube-scan 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

有人可以引导我找到正确的方向。

2 个答案:

答案 0 :(得分:0)

不确定在哪里寻找规则。 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。 有关其他排除方法的启发,请参见this answer

答案 1 :(得分:0)

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