SonarQube中文网站 > 新手入门 > SonarQube怎么区分源码目录和测试目录 SonarQube测试文件被计入覆盖率分母如何调整
教程中心分类
SonarQube怎么区分源码目录和测试目录 SonarQube测试文件被计入覆盖率分母如何调整
发布时间:2026/10/28 16:28:12

  测试文件显示为未覆盖时,先检查文件分类。即使测试执行成功,错误分类也会影响覆盖率。围绕“SonarQube怎么区分源码目录和测试目录,SonarQube测试文件被计入覆盖率分母如何调整”,下面以SonarQube Server英文界面及JavaScript、TypeScript项目的SonarScanner CLI配置为例说明。

  一、SonarQube怎么区分源码目录和测试目录

 

  sonar.sources定义业务源码范围,sonar.tests定义测试代码范围。正确归类的测试代码不参与覆盖率统计,但仍可接受适用于测试代码的规则检查。

 

  1、目录分开时直接设置根路径

 

  业务在src、测试在tests时,分别指定目录。初始范围不接受通配符。

 

  ①打开扫描实际使用的sonar-project.properties,设置sonar.sources=src、sonar.tests=tests。

 

  ②多个目录使用逗号分隔,路径相对于sonar.projectBaseDir;核对流水线的工作目录。

 

  ③检查是否存在sonar.sources=.等旧设置,避免遗漏测试分类后把整个仓库作为业务源码扫描。

 

  2、测试与源码混放时用包含模式细分

 

  src中混放.test.ts、.spec.ts文件时,先指定测试范围,再按后缀筛选。

 

  ①设置sonar.sources=src、sonar.tests=src。

 

  ②设置sonar.test.inclusions=src//*.test.ts,src//*.spec.ts,只把匹配文件归入测试范围。

 

  ③使用测试包含模式时,扫描器会自动把这些模式追加为源码排除模式;核对其他配置,确保同一文件不会同时属于两类。

 

  ④另有tests目录时,把它加入测试根路径,并补充相应包含模式,避免只识别src内的测试。

 

  3、通过界面核对细分条件

 

  网页可以配置包含、排除模式,但sonar.sources和sonar.tests需要在扫描端配置。

 

  ①打开项目,点击【Project Settings】→【General Settings】→【Analysis Scope】。

 

  ②在【Test File Inclusions】中核对测试包含模式,在【Source File Exclusions】中检查已有源码排除条件。

 

  ③使用配置文件时,对应参数为sonar.test.inclusions、sonar.exclusions;注意sonar.tests有s,sonar.test.inclusions中的test没有s。

 

  ④修改后重新运行扫描,检查日志中的源码、测试文件索引结果;出现重复索引错误时,修正两类范围的重叠。

 

  二、SonarQube测试文件被计入覆盖率分母如何调整

 

  优先修正分类。需保留源码分析、仅不参与覆盖率评价的文件,再设置覆盖率排除。

 

  1、确认是哪一批文件进入了统计

 

  覆盖率分母不是文件总行数。行覆盖率使用可覆盖行,项目的Coverage还可能包含条件覆盖信息。

 

  ①打开项目的【Measures】→【Coverage】,定位测试目录或具体测试文件。

 

  ②查看【Lines to Cover】和未覆盖行,确认异常文件确实贡献了可覆盖行。

 

  ③核对当前查看的是整体代码还是新增代码,以及对应分支和分析时间,避免比较不同范围的结果。

  2、分类错误时修改扫描范围

 

  文件名中有test,并不代表在所有扫描方式下都会自动归入测试代码。测试包含模式也不能扩大sonar.tests的初始范围。

 

  ①从异常文件的实际路径出发,检查它是否位于sonar.tests指定的目录内。

 

  ②核对包含模式是否匹配后缀、目录层级和大小写,补齐遗漏的测试辅助文件。

 

  ③删除误把业务文件归为测试的宽泛模式,重新扫描,确认测试文件移出覆盖率统计。

 

  ④使用Maven或Gradle时,先检查构建工程提供的源码和测试范围,不直接覆盖自动识别结果;SonarScanner for.NET不支持用户自定义这两个初始范围参数。

 

  3、只需排除覆盖率时设置专用参数

 

  sonar.coverage.exclusions只调整覆盖率范围,sonar.exclusions会把匹配的源码排除出分析,两者不能混用。

 

  ①点击【Project Settings】→【General Settings】→【Analysis Scope】。

 

  ②找到【Code coverage】→【Coverage Exclusions】,填写需要排除的路径模式并保存,例如tests/**。

 

  ③通过配置文件管理时,设置sonar.coverage.exclusions=tests/**;同一参数由扫描端传入时,会覆盖网页中的设置。

 

  ④不因文件难以覆盖就排除整个业务目录。C/C++/Objective-C的测试代码处理另有语言限制,应按对应分析器文档配置。

 

  4、覆盖率报告也要对应正确文件

 

  SonarQube导入外部覆盖率报告,不负责执行测试并生成报告。目录分类改好后,还要检查报告路径与源码是否对应。

 

  ①在扫描前重新执行测试并生成报告,确认报告来自当前源码版本。

 

  ②检查报告中的文件路径、项目基准目录和语言对应的报告参数;JavaScript、TypeScript常用sonar.javascript.lcov.reportPaths。

 

  ③查看扫描日志中的报告读取及路径解析提示,处理找不到文件、报告未生成等问题。

 

  ④不只在覆盖率工具中删掉测试文件就结束。SonarQube仍把它们归为源码时,可能继续将其计为未覆盖。

 

  三、SonarQube调整目录后如何确认配置生效

 

  保存参数后,检查扫描读取及后台处理结果。

 

  1、对照扫描上下文和文件指标复查

 

  选一个业务文件和一个测试文件作为检查样本,比只看项目百分比更容易发现范围错误。

 

  ①打开【Project Settings】→【Background Tasks】,找到本次分析,确认后台处理成功。

 

  ②点击该行的操作菜单,选择【Show SonarScanner Context】,核对【Project scanner properties】和【Project server settings】。

 

  ③检查目录、包含模式及覆盖率排除参数,再对照扫描调试日志中的文件分类;参数出现在上下文中,不等于拼写和用法一定正确。

 

  ④回到覆盖率页面,确认测试样本不再贡献可覆盖行,业务样本仍在统计范围内,并记录调整前后的Lines to Cover。

  总结

 

  希望“SonarQube怎么区分源码目录和测试目录,SonarQube测试文件被计入覆盖率分母如何调整”这篇文章能帮到大家。团队使用质量平台,最终还是为了更好地理解代码状况,让开发和交付少一些不确定。一个数字只有含义清楚,才方便大家据此讨论,也能减少围绕报表产生的误解。项目会不断增加模块,测试方式也会变化,日常积累的经验可以帮助团队更从容地面对这些变化。希望大家用好工具,把精力留给产品本身,逐步形成适合团队的工作习惯。如果有SonarQube相关需求,欢迎联系我们沟通。

176 5129 0128