You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

源码与JUnit测试同包时如何配置sonar.tests属性?

如何配置Sonar的sonar.tests属性(测试类与源码同目录场景)

别担心,虽然sonar.tests确实只支持指定目录而非单个文件,但我们可以通过结合Sonar的其他配置属性,轻松解决测试类和源码同目录的识别问题,不用折腾移动文件。

这里给你一套具体的配置方案:

核心思路

我们先指定包含测试类的根目录作为sonar.tests的目标,再通过文件匹配规则精准筛选出测试类,同时确保源码目录不会包含测试文件。

具体配置方式

根据你的项目构建工具,可选择对应的配置方式:

1. 使用sonar-project.properties文件

在项目根目录创建该文件,添加以下配置:

# 指定源码根目录
sonar.sources=src/java
# 指定测试文件所在的根目录(和源码同目录)
sonar.tests=src/java
# 筛选所有以UnitTest.java结尾的文件作为测试类
sonar.test.inclusions=**/*UnitTest.java
# 从源码中排除测试类,避免重复扫描
sonar.exclusions=**/*UnitTest.java

2. 在Maven的pom.xml中配置

如果你用Maven管理项目,可以在Sonar插件的配置块里添加这些属性:

<build>
    <plugins>
        <plugin>
            <groupId>org.sonarsource.scanner.maven</groupId>
            <artifactId>sonar-maven-plugin</artifactId>
            <version>3.9.1.2184</version>
            <configuration>
                <sonar.sources>src/java</sonar.sources>
                <sonar.tests>src/java</sonar.tests>
                <sonar.test.inclusions>**/*UnitTest.java</sonar.test.inclusions>
                <sonar.exclusions>**/*UnitTest.java</sonar.exclusions>
            </configuration>
        </plugin>
    </plugins>
</build>

关键说明

  • sonar.test.inclusions支持通配符:如果你的测试类命名规则不是*UnitTest.java,比如是*Test.java,直接把规则改成**/*Test.java即可。
  • 配置sonar.exclusions是为了避免重复扫描:因为sonar.sources和sonar.tests指向了同一个目录,需要明确告诉Sonar源码目录不包含测试类,防止统计错误或误判。
  • 建议使用3.7及以上版本的SonarScanner,这些匹配属性在新版本中支持更稳定。

这样配置后,Sonar就能准确识别出/src/java/ABC/HelloUnitTest.java是测试类,而Hello.java是源码类,完美解决同目录的识别问题~

内容的提问来源于stack exchange,提问作者user3126850

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:32