Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sonarqube 覆盖度量不考虑没有测试的代码吗?_Sonarqube_Code Coverage_Sonarqube Scan - Fatal编程技术网

Sonarqube 覆盖度量不考虑没有测试的代码吗?

Sonarqube 覆盖度量不考虑没有测试的代码吗?,sonarqube,code-coverage,sonarqube-scan,Sonarqube,Code Coverage,Sonarqube Scan,在一些组件具有测试覆盖率而其他组件没有的项目中,SonarQube似乎只根据具有覆盖率的组件计算总代码覆盖率。我希望没有测试覆盖率的组件中的代码行被分类(至少对于计算而言)为具有0%的代码覆盖率 示例: 项目X 单元1:100%覆盖率 模块2:不适用覆盖率(我认为这相当于计算中的0%) SonarQube覆盖率(项目X):100% 如何计算总覆盖率?如果这是设计的,为什么?覆盖率是根据测试执行期间覆盖的行计算的。如果没有测试,则跳过测试执行,根本不执行代码,因此不会生成覆盖率数据。因此,

在一些组件具有测试覆盖率而其他组件没有的项目中,SonarQube似乎只根据具有覆盖率的组件计算总代码覆盖率。我希望没有测试覆盖率的组件中的代码行被分类(至少对于计算而言)为具有0%的代码覆盖率

示例:

  • 项目X
    • 单元1:100%覆盖率
    • 模块2:不适用覆盖率(我认为这相当于计算中的0%)
SonarQube覆盖率(项目X):100%


如何计算总覆盖率?如果这是设计的,为什么?

覆盖率是根据测试执行期间覆盖的行计算的。如果没有测试,则跳过测试执行,根本不执行代码,因此不会生成覆盖率数据。因此,不适用与0%之间存在差异

如果您向模块添加一个空测试,它将用于计算并产生0%的覆盖率

编辑: 假设您正在使用Jacoco进行覆盖。Jacoco将覆盖率信息写入文件(即
Jacoco.exec
)。对于单元测试(maven surefire),该文件将写入模块的目标目录,并使用该文件计算该模块的覆盖率。没有档案,就没有报道

当我运行集成测试时,我想确定测试覆盖了整个项目代码的哪些部分。我的集成测试通常也位于单独的模块中。因此,在这种情况下,每个模块的覆盖率没有多大意义,因为测试(1个模块)和产品(所有其他模块)是稀疏的。 因此,我运行集成测试并将覆盖率信息写入根模块(项目)的目标文件夹中的单个
jacoco it.exec
文件中。因此,将计算整个代码库的覆盖率,包括覆盖率为0%的模块(请参见此处了解如何设置:)

这种方法的缺点是,单个模块的测试覆盖了单个模块代码的哪些部分。因为一个模块的部分可以被另一个模块的测试覆盖,即一个模块的覆盖率可以是30%,而无需在该模块中进行任何测试

因此,您可以选择:

  • 每个模块的详细覆盖率,无测试模块的覆盖率为N/A
  • 整个项目的总覆盖率,无测试模块覆盖率为0%,但没有模块的准确覆盖率信息
  • 两者:分别使用这两种方法进行单元测试和集成测试

您好,我理解其中的区别,以不同的方式可视化0和N/A非常有意义,但在总结覆盖范围时,如果“跳过”没有覆盖范围的模块,很容易得出错误的结论。作为一名开发人员,我会看到这些数字,然后说:“是的,我们有很好的覆盖率,这里没什么可做的。”如果按照我的建议进行计算,人们会发现覆盖率很低,然后进一步调查,发现有模块没有覆盖率,你需要计算整个项目的覆盖率,但是你的信息是按模块散播的,我编辑了相应的回复。谢谢你的详细回复。我会接受这个答案,即使我不完全满意SonarQube如何处理这个问题。最好有一些迹象表明覆盖率数据不完整或类似。现在,对于SonarQube中的几个语言插件,可以声明是否应该将没有覆盖率解释为0%覆盖率。谢谢这个(声纳来源)!请将其添加到所有语言插件(例如,从5.6.5 LTS版本起的C/C++/Objective-C插件不可能)Alix,您能给我指一些关于此功能的文档吗?