我一直试图让SonarQube
与一个简单的点网应用程序一起工作。我已经成功启动并运行了它,但是代码覆盖率无法正常工作。
当SonarQube停止对许多“转到”覆盖工具(例如,通过Gallio的DotCover and OpenCover
)的支持时,似乎其他人也遇到了此问题。
我已经尝试了一些VS命令行工具来生成.coverage
文件
vstest.console.exe .\UnitTestProject1\bin\Debug\UnitTestProject1.dll /EnableCodeCoverage
和
CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .\UnitTestProject1\bin\Debug\UnitTestProject1.dll
并编写了一些代码,例如将其隐藏到here的
.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>
这是因为它不喜欢XML的结构,但是我不确定期望什么以及我必须对coverage文件进行多少工作才能将其转换为Sonar喜欢的格式
希望我走了错误的道路,并且有一种简单的方法可以将VS Coverage或
coveragexml
文件集成到Sonar中,而无需进行过多工作最佳答案
C#4.1插件支持OpenCover和dotCover报告。分别为两个工具设置sonar.cs.dotcover.reportsPaths
或sonar.cs.opencover.reportsPaths
属性,以导入代码覆盖率。
Gallio并不完全是首选工具:该项目自2013年以来就一直处于闲置状态。SonarQube C#Plugin 2.x插件(依赖Gallio)的主要问题是它自己启动了Gallio-不允许最终用户自定义如何启动测试并收集覆盖范围。
现在情况变得简单得多:启动您喜欢的代码覆盖率工具,要求它生成报告,然后将其提供给MSBuild SonarQube Runner。
如果您使用的是Team Foundation Server 2013,则启用代码覆盖范围就像在生成定义中选择Enable Code Coverage
选项。
现在,非常不幸和令人困惑的是,Microsoft有两种不同的.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.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" collect /output:VisualStudio.coverage "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "UnitTestProject1\bin\Debug\UnitTestProject1.dll"
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:VisualStudio.coveragexml VisualStudio.coverage
MSBuild.SonarQube.Runner end
我不建议使用XSLT转换代码覆盖率报告格式,而应使用
CodeCoverage.exe
Microsoft工具。关于具有MsTest的SonarQube测试覆盖率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31803605/