use*_*699 9 mstest code-coverage sonarqube vstest
我一直试图SonarQube使用一个简单的点网应用程序.我已经取得了一些成功,但是代码覆盖率无法正常运行.
当SonarQube停止支持许多"转到"覆盖工具(例如DotCover and OpenCovervia Gallio)时,看起来许多其他人都面临这个问题
我遵循的例子是:
我尝试了一些VS命令行工具来生成.coverage文件
vstest.console.exe .\UnitTestProject1\bin\Debug\UnitTestProject1.dll /EnableCodeCoverage
Run Code Online (Sandbox Code Playgroud)
和
CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .\UnitTestProject1\bin\Debug\UnitTestProject1.dll
Run Code Online (Sandbox Code Playgroud)
并写了一些代码,想把它.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>
Run Code Online (Sandbox Code Playgroud)
甚至可以使用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>
Run Code Online (Sandbox Code Playgroud)
当我运行声纳时
- MSBuild.SonarQube.Runner.exe开始
- 的MSBuild
- MSBuild.SonarQube.Runner.exe结束
我得到错误,如引起:
unknown XML Node,期望覆盖,但得到结果
这是因为它不喜欢我的XML结构,但我不确定是什么是期望的以及我需要对coverage文件做多少工作才能将其转换为Sonar喜欢的格式
希望我一直走错路,有一种简单的方法可以将VS Coverage或coveragexml文件集成到Sonar中,而无需太多工作
我的额外信息
Sonar pluginsARE
- c#= 4.1
- 通用覆盖率= 1.1
C#4.1插件都支持OpenCover和dotCover报告.分别为两个工具设置sonar.cs.dotcover.reportsPathsor sonar.cs.opencover.reportsPaths属性以导入代码覆盖率.
Gallio并不完全是首选工具:该项目自2013年以来一直处于非活动状态.依赖于Gallio的SonarQube C#Plugin 2.x插件的主要问题在于它本身就是启动Gallio - 不允许最终用户自定义如何启动测试和收集覆盖范围.
现在情况要容易得多:启动您喜欢的代码覆盖率工具,让它生成一个报告,并将其提供给MSBuild SonarQube Runner.
如果您使用的是Team Foundation Server 2013,则启用代码覆盖与选择Enable Code Coverage构建定义中的选项一样.
现在,非常不幸和令人困惑的是,微软有两种不同的.coveragexml格式,SonarQube C#插件只支持其中一种(即现在.请参阅http://jira.sonarsource.com/browse/SONARNTEST-3) .
在等待被固定的票,这里是产生预期的步骤.coveragexml报告(注:更换14的12,如果您使用的是2015年而不是2013 VS在不同的路径):
MSBuild.SonarQube.Runner begin /k:SonarQube_Project_Key /n:SonarQube_Project_Name /v:1.0 /d:sonar.cs.vscoveragexml.reportsPaths=%CD%\VisualStudio.coveragexmlmsbuild"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.coverageMSBuild.SonarQube.Runner end我不建议使用XSLT转换代码覆盖率报告格式,CodeCoverage.exe而是使用Microsoft工具.