jacoco覆盖率,白色标识的代表什么?

问题

jacoco覆盖率,这种白色背景的代表什么?

环境

  • 绿色代表完全覆盖
  • 黄色代表部分覆盖,通常是分支覆盖不足
  • 红色代表在所在区域代码入口被覆盖的情况下,未被覆盖的代码
  • 白色代表在所在区域代码入口未覆盖,代码肯定也是完全未覆盖的。比如import语句、方法被重载等,代码未被插桩,没有统计。

官方解释

  • No coverage: No branches in the line has been executed (red diamond)
  • Partial coverage: Only a part of the branches in the line have been executed (yellow diamond)
  • Full coverage: All branches in the line have been executed (green diamond)
1 Like

非常感谢思寒老师的解答 :handshake:咱们学院的贴就是给力,基本上·发帖的问题,都有人答

这个所在区域代码入口未被覆盖,是啥意思?没太懂,能辛苦思寒老师,举例说明下嘛

所在区域代码入口被覆盖,是说这个方法,已经被调用了。未被覆盖,是说这个方法连调用都没被调用?

这个入口,说的就是 方法嘛? 因为这些插桩的代码都是在方法里面,所以方法是 区域代码的入口?

而且我观察,所有的public的方法那行,都是白色的。
是因为 jacoco是插桩方式,插桩是在方法里面,要执行的逻辑代码前面进行插桩(分支代码每个分支代码前面插桩)的。
统计覆盖情况,其实就是统计插桩的代码被执行的情况。以此来区分 红黄绿颜色?
而插桩是不会在 public void……等 方法前面插桩,所以 方法那行都是白色的?

比如一些import语句,或者方法被重载过,真正执行的并不是当前的方法

能被插桩的地方才会有统计,有些语句是无法被插桩的,比如import 一些注解、函数定义等。他们本身并不是实际执行的指令,只是一种定义,而不是执行,所以没法插桩。

1 Like

明白了,这个听懂了。而且白色的背景代码,我刚才又仔细观察了,覆盖率报告,它是分入口的,比如 方法a,和方法b,是同一个java文件,但是你从方法a点进去,看的java文件,只有方法a是有颜色区分的。方法b全是白色,你从方法b进入该java文件,方法b是有颜色区分的。方法a全是白色的。说明入口不同,颜色不同,颜色区分。你从那个入口进入,就统计那个入口的。并不是我想的那样,按照该java文件的维度来区分的。(我以为的是该java文件,方法a,b都被执行的话,报告里面不管从哪里进入都是一个java文件,方法a b都是有颜色区分的)

就像定义常量,定义code码,等? 那这些无法插桩的语句,是否算在覆盖率的统计内,比如, 100行代码, 10行是这种无法插桩的, 覆盖率永远无法达到 100%? 还是覆盖率的总行数,是指可插桩的,可执行代码,无法插桩执行的不被统计到总行数里面?

我这里无论怎么进去,都是会展示所有代码的覆盖情况。因为每个方法的覆盖率统计的链接其实只有行数信息,没有函数信息。

覆盖率是基于指令的,并不是代码行的。一个文件里还有很多空行、注释之类的,这自然是无法覆盖的。
覆盖率100%的意思是,文件内的指令或者代码块被100%覆盖,并不是指文件的每一行。

代码 exec文件都是同一套,第二张图,就是用>java -jar jacococli.jar report 方式生成了下。如此看来,区分入口统计,是Jenkins的jacoco插件造成的。使用jacococli生成的就是按照java文件的维度统计的

1 Like