源码与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
相关产品推荐
相关产品推荐

