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时

  • MSBuild.SonarQube.Runner.exe开始
  • 的MSBuild
  • MSBuild.SonarQube.Runner.exe结束
  • 我得到如下错误: unknown XML Node ,预计覆盖范围但得到结果

    这是因为它不喜欢我的XML结构,但我不确定期望什么,以及我在覆盖文件上需要做多少工作才能将其转换为Sonar喜欢的格式

    希望我一直走错了路,并且有一个简单的方法可以将VS Coverage或coveragexml文件集成到Sonar中,而无需太多工作

    有关我的Sonar plugins额外信息

  • c#= 4.1
  • 通用覆盖率= 1.1

  • C#4.1插件支持OpenCover和dotCover报告。 分别为这两个工具设置sonar.cs.dotcover.reportsPathssonar.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工具。

    链接地址: http://www.djcxy.com/p/87357.html

    上一篇: SonarQube Test Coverage with MsTest

    下一篇: Covariance in delegate, any example?