首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖度量不考虑没有测试的代码?

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

Stack Overflow用户
提问于 2016-06-29 07:26:50
回答 1查看 1.1K关注 0票数 2

在一个项目中,有些组件具有测试覆盖率,而另一些组件则不具有测试覆盖率,在这个项目中,SonarQube似乎只根据覆盖范围的组件来计算代码覆盖率。我希望没有测试覆盖的组件中的代码行被分类为0%的代码覆盖率(至少在计算中是这样)。

示例:

  • 项目X
    • 单元1: 100%覆盖率
    • 模块2: N/A覆盖率(我认为这相当于计算中的0%!)

SonarQube覆盖率(项目X):100%

如何计算总覆盖范围?如果这是故意的,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-29 11:24:32

覆盖率是根据测试执行期间覆盖的行计算的。如果没有测试,则跳过测试执行,根本不执行任何代码,因此不会产生覆盖数据。因此,N/A与0%是有差别的。

如果将空测试添加到模块中,则将使用该测试进行计算并生成0%的覆盖率。

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

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

对于这种方法,您可以忽略的是,单个模块的代码的哪些部分被该模块的测试所覆盖。因为一个模块的部分可以被另一个模块的测试覆盖,也就是说,一个模块的覆盖率可以是30%,而没有在该模块中进行任何测试。

所以你可以选择:

  • 每个模块的详细覆盖率,以及具有N/A覆盖的无测试模块。
  • 整个项目的总覆盖范围,无测试模块的覆盖率为0%,但没有按模块提供确切的覆盖信息。
  • 这两种方法都分别用于单元测试和集成测试。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38093013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档