Sonarqube gradle 插件 - 排除测试源会破坏报告中的单元测试计数

M.R*_*uti 6 gradle sonarqube sonarqube-scan

我正在使用 Gradle sonarqube插件,我需要从声纳分析中排除所有测试源(主要目标是从问题/代码气味报告中过滤掉单元测试类)

为此,我使用了如下专用属性,从分析中sonar.test.exclusions排除整个目录src/test

sonarqube {
    properties {
        property("sonar.exclusions" , "")
        property("sonar.test.exclusions" , "src/test/**/*.java")
        // other sonar properties, omitted
    }
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作(测试源被过滤掉)但是:设置此属性时,声纳无法正确计算/报告单元测试的数量。

请参阅一个非常基本的项目的简单示例:2 个主要源文件,1 个包含 2 个 Junit 测试的测试源文件(还包含一些我不想在报告中看到的问题)

  1. 没有排除情况:

Sonar 正确报告了我的 2 个单元测试,但它还包括单元测试类中的代码味道

在此输入图像描述

  1. 排除情况:

现在,单元测试中的代码气味已被正确过滤,但我丢失了单元测试计数信息 在此输入图像描述

笔记:

  • 使用 Gradle 6.7、sonarqube 插件版本 3.0 和声纳服务器Community EditionVersion 8.4.2
  • 也尝试过该属性sonar.exclusions:同样的问题
  • 所有其他声纳属性均已正确设置,并且在两种情况下具有相同的值:特别sonar.testssonar.java.test.binaries,,,,sonar.junit.reportPathssonar.jacoco.reportPath

知道如何配置 sonarqube 插件,以排除正确的测试源,同时保持单元测试信息可用吗?

ToY*_*nos 3

我同意 Chriki 的答案,但只同意第一部分:使用sonar.test.exclusions不是好方法。

我不同意最后一部分:使用sonar.issue.ignore.multicriteriaGradle 是完全可能的

https://www.baeldung.com/sonar-exclude-violations#using-sonar-projectproperties

尝试这样的事情(虽然我没有测试过):

sonarqube {
    properties {
        property "sonar.issue.ignore.multicriteria", "e1"
        property "sonar.issue.ignore.multicriteria.e1.resourceKey", "src/test/java/**/*"
        property "sonar.issue.ignore.multicriteria.e1.ruleKey", "*"
    }
}
Run Code Online (Sandbox Code Playgroud)