【单元测试】五、JaCoCoCoverageReport各项指标说明煮鱼汤
总览
代码
指标说明
Instructions
刑法114条
Jacoco 计算的最⼩单位就是字节码指令。指令覆盖率表明了在所有的指令中,
泳池用品
哪些被指令过以及哪些没有被执⾏。这项指数完全独⽴于源码格式并且在任何情况下有效,不需要类⽂件 的调试信息。
Branches
Jacoco 对所有的 if 和 switch 指令计算了分⽀覆盖率。这项指标会统计所有的分⽀数
量,并同时⽀出哪些分⽀被执⾏,哪些分⽀没有被执⾏。这项指标也在任何情况都有效。异常处理不考虑在分⽀范围内。
如果class⽂件使⽤调试信息编译的话,产⽣的覆盖率可以映射到源码⾏并且⾼亮提⽰:
红⾊菱形:在这⼀⾏中没有分⽀被执⾏
黄⾊菱形:这⼀⾏的分⽀中只有⼀部分被执⾏
笔触
波拿马绿⾊菱形:这⼀⾏的所有分⽀都被执⾏
Complexity
Jacoco为每个⾮抽象⽅法计算圈复杂度,并也会计算每个类,包,组的复杂度。根据由McCabe1996圈复杂度的定义是,在(线性)组合中,计算在⼀个⽅法⾥⾯所有可能路径的最⼩数⽬。所以复杂度可以作为度量单元测试是否有完全覆盖所有场景的⼀个依据。复杂度即使是在没有调试信息的情况下也可以计算。圈复杂度V(G)的正式定义是基于⽅法的控制流图的有向图表⽰:
v(G) = E – N + 2
E是边界的数量,N是节点的数量。Jacoco 基于下⾯的⽅程来计算复杂度,B是分⽀的数量,D是决策点的数量:
v(G) = B – D + 1
基于每个分⽀的被覆盖情况,Jacoco也为每个⽅法计算覆盖和缺失的复杂度。缺失的复杂度同样表⽰测试案例没有完全覆盖到这个模块。注意Jacoco不将异常处理作为分⽀,try/catch块也同样不增加复杂度。
Lines
该项指数在有调试信息的情况下计算。
红⾊背景:⽆覆盖,该⾏的所有指令均⽆执⾏。
黄⾊背景:部分覆盖,该⾏部分指令被执⾏。
绿⾊背景:全覆盖,该⾏所有指令被执⾏。
Methods浪费的近义词
每⼀个⾮抽象⽅法都⾄少有⼀条指令。若⼀个⽅法⾄少被执⾏了⼀条指令,就认为它被执⾏过。因为 JaCoco
直接对字节码进⾏操作,所以有些⽅法没有在源码显⽰(⽐如某些构造⽅法和由编 译器⾃动⽣成的⽅法)也会被计⼊在内。
企业文化定义胜利河美食街Class
每个类中只要有⼀个⽅法被执⾏,这个类就被认定为被执⾏。同 5 ⼀样,有些没有在源码声明的⽅法被执⾏,也认定该类被执⾏。