SonTQube测试覆盖与MsTest
我一直在努力让SonarQube
与一个简单的网络应用程序SonarQube
工作。 我已经取得了一些成功,并且代码覆盖不起作用。
看起来像许多其他人遇到这个问题时,SonarQube停止支持许多'去'覆盖工具,如DotCover and OpenCover
通过加利奥
我遵循的例子是:
Sonar Runner在处理从Visual Studio的MSTest生成的.coveragexml文件期间出错
VS2013 CodeCoverage.exe runsettings文件从不分析
我已经尝试了一些VS命令行工具来生成一个.coverage
文件
vstest.console.exe .UnitTestProject1binDebugUnitTestProject1.dll /EnableCodeCoverage
和
CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .UnitTestProject1binDebugUnitTestProject1.dll
并编写了一些代码,将它转换成一个.coveragexml
文件
获取以下XML:
<?xml version="1.0" standalone="yes"?>
<CoverageDSPriv>
<Module>
<ModuleName>unittestproject1.dll</ModuleName>
<ImageSize>32768</ImageSize>
<ImageLinkTime>0</ImageLinkTime>
<LinesCovered>12</LinesCovered>
<LinesPartiallyCovered>0</LinesPartiallyCovered>
<LinesNotCovered>0</LinesNotCovered>
<BlocksCovered>9</BlocksCovered>
<BlocksNotCovered>0</BlocksNotCovered>
<NamespaceTable>
<BlocksCovered>9</BlocksCovered>
<BlocksNotCovered>0</BlocksNotCovered>
<LinesCovered>12</LinesCovered>
<LinesNotCovered>0</LinesNotCovered>
甚至可以使用XSLT样式表作为SonarQube跑步者使用的样式表
<?xml version="1.0" encoding="utf-8"?>
<results>
<modules>
<module name="unittestproject1.dll" path="unittestproject1.dll" block_coverage="100" line_coverage="100" blocks_covered="9" blocks_not_covered="0" lines_covered="12" lines_partially_covered="0" lines_not_covered="0">
<functions>
<function name="Setup" type_name="UnitTest1" block_coverage="100" line_coverage="100" blocks_covered="1" blocks_not_covered="0" lines_covered="2" lines_partially_covered="0" lines_not_covered="0">
<ranges>
<range source_id="1" covered="yes" start_line="13" start_column="9" end_line="13" end_column="10" />
<range source_id="1" covered="yes" start_line="15" start_column="9" end_line="15" end_column="10" />
</ranges>
</function>
当我运行Sonar时
我得到如下错误: unknown XML Node
,预计覆盖范围但得到结果
这是因为它不喜欢我的XML结构,但我不确定期望什么,以及我在覆盖文件上需要做多少工作才能将其转换为Sonar喜欢的格式
希望我一直走错了路,并且有一个简单的方法可以将VS Coverage或coveragexml
文件集成到Sonar中,而无需太多工作
有关我的Sonar plugins
额外信息
C#4.1插件支持OpenCover和dotCover报告。 分别为这两个工具设置sonar.cs.dotcover.reportsPaths
或sonar.cs.opencover.reportsPaths
属性以导入代码覆盖率。
Gallio并非完全适用于该工具:该项目自2013年起无法使用。依赖Gallio的SonarQube C#插件2.x插件的主要问题是它自己启动Gallio - 不允许最终用户自定义应该如何启动测试并收集覆盖范围。
现在情况要容易得多:启动您最喜欢的代码覆盖工具,请求它生成报告,并将其提供给MSBuild SonarQube Runner。
如果您使用的是Team Foundation Server 2013,则启用代码覆盖范围是在构建定义中选择“ Enable Code Coverage
选项。
现在,微软有两种不同的.coveragexml
格式,并且SonarQube C#插件仅支持其中一种(就是说,现在看到http://jira.sonarsource.com/browse/SONARNTEST- 3)。
在等待该票证被修复时,以下是生成预期的.coveragexml
报告的步骤(注意:如果您使用VS 2013而不是2015年,请在各种路径中将14
替换为12
):
MSBuild.SonarQube.Runner begin /k:SonarQube_Project_Key /n:SonarQube_Project_Name /v:1.0 /d:sonar.cs.vscoveragexml.reportsPaths=%CD%VisualStudio.coveragexml
msbuild
"C:Program Files (x86)Microsoft Visual Studio 14.0Team ToolsDynamic Code Coverage ToolsCodeCoverage.exe" collect /output:VisualStudio.coverage "C:Program Files (x86)Microsoft Visual Studio 14.0Common7IDECommonExtensionsMicrosoftTestWindowvstest.console.exe" "UnitTestProject1binDebugUnitTestProject1.dll"
"C:Program Files (x86)Microsoft Visual Studio 14.0Team ToolsDynamic Code Coverage ToolsCodeCoverage.exe" analyze /output:VisualStudio.coveragexml VisualStudio.coverage
MSBuild.SonarQube.Runner end
我不推荐使用XSLT来转换代码覆盖率报告格式,而是使用CodeCoverage.exe
Microsoft工具。