Sonarqube 覆盖度量不考虑没有测试的代码吗?
在一些组件具有测试覆盖率而其他组件没有的项目中,SonarQube似乎只根据具有覆盖率的组件计算总代码覆盖率。我希望没有测试覆盖率的组件中的代码行被分类(至少对于计算而言)为具有0%的代码覆盖率 示例:Sonarqube 覆盖度量不考虑没有测试的代码吗?,sonarqube,code-coverage,sonarqube-scan,Sonarqube,Code Coverage,Sonarqube Scan,在一些组件具有测试覆盖率而其他组件没有的项目中,SonarQube似乎只根据具有覆盖率的组件计算总代码覆盖率。我希望没有测试覆盖率的组件中的代码行被分类(至少对于计算而言)为具有0%的代码覆盖率 示例: 项目X 单元1:100%覆盖率 模块2:不适用覆盖率(我认为这相当于计算中的0%) SonarQube覆盖率(项目X):100% 如何计算总覆盖率?如果这是设计的,为什么?覆盖率是根据测试执行期间覆盖的行计算的。如果没有测试,则跳过测试执行,根本不执行代码,因此不会生成覆盖率数据。因此,
- 项目X
- 单元1:100%覆盖率
- 模块2:不适用覆盖率(我认为这相当于计算中的0%)
如何计算总覆盖率?如果这是设计的,为什么?覆盖率是根据测试执行期间覆盖的行计算的。如果没有测试,则跳过测试执行,根本不执行代码,因此不会生成覆盖率数据。因此,不适用与0%之间存在差异 如果您向模块添加一个空测试,它将用于计算并产生0%的覆盖率 编辑: 假设您正在使用Jacoco进行覆盖。Jacoco将覆盖率信息写入文件(即
Jacoco.exec
)。对于单元测试(maven surefire),该文件将写入模块的目标目录,并使用该文件计算该模块的覆盖率。没有档案,就没有报道
当我运行集成测试时,我想确定测试覆盖了整个项目代码的哪些部分。我的集成测试通常也位于单独的模块中。因此,在这种情况下,每个模块的覆盖率没有多大意义,因为测试(1个模块)和产品(所有其他模块)是稀疏的。
因此,我运行集成测试并将覆盖率信息写入根模块(项目)的目标文件夹中的单个jacoco it.exec
文件中。因此,将计算整个代码库的覆盖率,包括覆盖率为0%的模块(请参见此处了解如何设置:)
这种方法的缺点是,单个模块的测试覆盖了单个模块代码的哪些部分。因为一个模块的部分可以被另一个模块的测试覆盖,即一个模块的覆盖率可以是30%,而无需在该模块中进行任何测试
因此,您可以选择:
- 每个模块的详细覆盖率,无测试模块的覆盖率为N/A
- 整个项目的总覆盖率,无测试模块覆盖率为0%,但没有模块的准确覆盖率信息
- 两者:分别使用这两种方法进行单元测试和集成测试