Sonar vNext:未报告代码覆盖率,但找到覆盖文件

时间:2016-11-04 00:42:51

标签: .net sonarqube sonarqube-scan

我遇到Sonar没有报告在vNext构建期间正在分析的应用程序的代码覆盖率的问题。 TFS和Sonar都在本地托管,我使用的是Sonar 6.0。我环顾四周,并没有看到任何相同问题的帖子,所以我想我会发帖看看是否有人有任何想法。

在构建期间,运行单元测试套件,该套件生成trx文件,coverage文件和coveragexml文件。在声纳属性字段中,我将其指向要用于分析的文件

 /d:sonar.cs.vscoveragexml.reportsPaths="$(Common.TestResultsDirectory)\*.coveragexml" /d:sonar.cs.vstest.reportsPaths="$(Common.TestResultsDirectory)\*.trx"

查看构建日志时,它会在“完成分析”步骤中拾取这两个文件:

2016-10-28T14:31:01.5800405Z 10:31:01.463  Attempting to locate a test    results (.trx) file...

2016-10-28T14:31:01.5800405Z 10:31:01.463  Located a test results file: E:\agent\_work\24\TestResults\tfsbuildagent_BUILD1 2016-10-28 10_30_52.trx

2016-10-28T14:31:15.7254549Z INFO: Parsing the Visual Studio coverage XML report E:\agent\_work\24\TestResults\tfsbuildagent_BUILD1 2016-10-28 10_30_52\In\BUILD1\tfsbuildagent_BUILD1 2016-10-28 10_30_38.coveragexml

2016-10-28T14:31:15.9254749Z INFO: Adding this code coverage report to the cache for later reuse: E:\agent\_work\24\TestResults\tfsbuildagent_BUILD1 2016-10-28 10_30_52\In\BUILD1\tfsbuildagent_BUILD1 2016-10-28 10_30_38.coveragexml

但是当你在Sonar中查看应用程序时,没有显示代码覆盖率。我可以打开coveragexml文件,看起来肯定有覆盖数据。我还让应用程序的工程师在运行测试套件后向我展示了visual studio中的覆盖结果,并且确实报告了覆盖范围。我无法弄清楚为什么这些数据没有被翻译成声纳。

这也提出了一个问题:Sonar究竟如何使用测试结果文件和coverage XML文件中的数据?是直接从这些文件中获取数据,只是将这些数字作为其结果的一部分,还是使用这些数字和数据的组合来分析代码来计算最终统计数据?我从来没有在网上找到明确的答案,甚至在Sonar的网站上也没有。我觉得对这个过程有更好的理解也有助于解决这个问题。

无论如何,如果有人能够提供任何有关Sonar没有在覆​​盖文件中获取数据的可能性的见解,我将非常感激。如果您需要任何其他信息,请告诉我们。

2 个答案:

答案 0 :(得分:0)

我能够解决未报告的覆盖问题,但它可能与我的情况有关,而我仍然不确定为什么这样可以解决问题。

作为构建过程的一部分,我必须为这个特定的应用程序构建2个解决方案。其中一个解决方案包含一个测试项目,但另一个解决方案没有。事实上,两个项目都在建设中,只有一个项目正在进行测试。

我检查过以确保一个版本的输出没有覆盖另一个版本,但事实并非如此。

修复是创建一个单独的vNext构建,其特定目的是向Sonar报告,并且只构建主要解决方案并运行它的测试套件。他们的测试套件只能访问与主要解决方案相关的代码,因此在这种情况下,这对开发人员来说很好。

答案 1 :(得分:0)

我知道这个问题很旧,但是我只是遇到了类似的问题,也许有人会碰到这个线程,这可能会有所帮助。

问题不在声纳中,而在vstest和.netcore中,涵盖了代码。覆盖率文件为空,这就是为什么没有选择进行分析的原因。

要解决此问题,您需要在以下代码段中添加到所有csproj文件(测试和产品):

 <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework> 
    <!-- Required in both test/product projects. This is a temporary workaround for https://github.com/microsoft/vstest/issues/800 -->
    <DebugType>pdbonly</DebugType>
  </PropertyGroup>

根据https://github.com/microsoft/vstest/issues/800,它应该是固定的,但是对此有不同的看法。

此外,我需要将解决方案中的所有项目设置为x64,因为在运行设置中,我有<TargetPlatform>x64</TargetPlatform>