【发布时间】:2015-12-14 23:14:09
【问题描述】:
我目前有一个构建文件,可以在我的 SonarQube 服务器上生成基本分析报告。
MSBuild.SonarQube.Runner.exe 开始 /k:"mykey" /n:"myname" /v:"1.0.0" msbuild ... # 构建生产代码 MSBuild.SonarQube.Runner.exe 结束 msbuild ... # 构建测试代码 OpenCover ... # 运行测试代码并生成(非 SonarQube)覆盖率报告到目前为止一切顺利。现在我想添加测试覆盖报告。这就是我卡住的地方。如何在我的 C# SonarQube 项目中包含测试覆盖率报告?
我尝试了两种方法来获取测试覆盖率报告,但都没有达到预期的效果:
-
运行两个单独的 MSBuild.SonarQube.Runner.exe 会话,一个用于分析生产代码,另一个用于处理测试覆盖率报告;使用这种方法,我看不到任何错误,看到基本分析,但看不到测试覆盖率报告:
MSBuild.SonarQube.Runner.exe 开始 /k:"mykey" /n:"myname" /v:"1.0.0" msbuild ... # 构建生产代码 MSBuild.SonarQube.Runner.exe 结束 MSBuild.SonarQube.Runner.exe 开始 /k:"mykey" /n:"myname" /v:"1.0.0" /d:sonar.cs.opencover.reportsPaths="opencover.xml" /d:sonar.cs .nunit.reportsPaths="nunit.xml" msbuild ... # 构建测试代码 OpenCover ... # 运行测试代码并生成(非 SonarQube)覆盖率报告 MSBuild.SonarQube.Runner.exe 结束 -
扩展原来的 MSBuild.SonarQube.Runner.exe 会话以包含与测试相关的构建代码;使用这种方法,我看不到任何错误,但也看到 NO 报告:
MSBuild.SonarQube.Runner.exe 开始 /k:"mykey" /n:"myname" /v:"1.0.0" /d:sonar.cs.opencover.reportsPaths="opencover.xml" /d:sonar.cs .nunit.reportsPaths="nunit.xml" msbuild ... # 构建生产代码 msbuild ... # 构建测试代码 OpenCover ... # 运行测试代码并生成(非 SonarQube)覆盖率报告 MSBuild.SonarQube.Runner.exe 结束
技术背景
- SonarQube 5.1.2
- C# 插件 5.2
- MSBuild.SonarQube.Runner 1.0.1
- NUnit.Runners.Net45.x64 2.6.3
- OpenCover 4.5.3207
我的背景
- 我在使用 SonarQube 的 Java 和 Java 方面经验丰富,但对使用 SonarQube 的 C# 和 C# 不熟悉。
- 我已阅读
其他背景
- 我用两个单独的 .csproj 文件将我的生产代码和测试代码分隔在两个单独的 FS 树中。
-
我通过两种方式将我的测试项目(具有 MyTests.csproj 项目文件)标识为 SonarQube 的测试项目:
- 我在 SonarQube 服务器上将 sonar.cs.msbuild.testProjectPattern 设置为
[^\\]*Test[^\\]*$并 - 我将
<SonarQubeTestProject>true</SonarQubeTestProject>添加到 MyTests.csproj 中的无条件 PropertyGroup。
- 我在 SonarQube 服务器上将 sonar.cs.msbuild.testProjectPattern 设置为
【问题讨论】: