[英]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.