.NET Core 单元测试项目的静态代码分析 *.cs 文件与 SonarQube

问题描述

我有一个包含单元测试项目的 Visual Studio .NET Core 解决方案。所有项目都引用了 Microsoft.NET.Test.Sdk Nuget 包,据我所知,这是执行单元测试的“必备”包。 我想对单元测试代码执行静态代码分析(因为它也是我们可交付成果的一部分)。但是,每次我将声纳分析作为 Azure DevOps 管道的一部分运行时,我都会在 SonarQube 报告中看到单元测试 *.cs 文件(以及单元测试项目中的其他文件)中的“0”行代码

enter image description here

我还发现了有趣的事情。如果我删除了对 Microsoft.NET.Test.Sdk Nuget 包的引用 - 静态代码分析执行没有任何问题,并且代码对于 Sonar Qube 扫描仪是可见的。 此外,在 Azure DevOps 构建代理上运行时,“dotnet build”命令不会为单元测试项目报告任何警告——即使它应该 ?。

我的 SonarQube Prepare 任务配置管道文件非常简单,如下所示:

- task: SonarQubePrepare@4
  displayName: Prepare SonarQube analysis 
  inputs:
    SonarQube: 'SonarQube (XX)'
    scannerMode: 'MSBuild'
    projectKey: 'XXX-YYY'
    projectName: 'XXX-YYY'    
    extraProperties: |
      sonar.sources=src/**/*

在 Azure DevOps 代理上运行的详细 dotnet build 命令如下所示:

/usr/bin/dotnet build /home/vsts/work/1/s/src/XXX.IntegrationTests/Tests/XXX.YYY.IntegrationTests.csproj -dl:CentralLogger,"/home/vsts/work/_tasks/DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b/2.181.0/dotnet-build-helpers/Microsoft.TeamFoundation.distributedTask.MSBuild.Logger.dll"*ForwardingLogger,"/home/vsts/work/_tasks/DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b/2.181.0/dotnet-build-helpers/Microsoft.TeamFoundation.distributedTask.MSBuild.Logger.dll" --configuration Release

我想知道使用 Microsoft.NET.Test.Sdk 参考的 dotnet 核心项目有什么特别之处。他们的构建过程有什么不同吗?有什么办法可以“强制”为他们进行静态代码分析?

任何帮助将不胜感激。

解决方法

好的。发生这种情况是“按设计”SonarQube 行为。可以在以下位置找到如何覆盖它的详细信息和方法:https://github.com/SonarSource/sonar-scanner-msbuild/wiki/Analysis-of-product-projects-vs.-test-projects