maven 直线和分支覆盖范围之间的差异

lnlaulya  于 2023-03-17  发布在  Maven
关注(0)|答案(3)|浏览(110)

Cobertura Maven中的直线和分支覆盖之间有什么区别?

eiee3dmh

eiee3dmh1#

行覆盖率衡量你执行了多少语句(语句通常是一行代码,不包括注解、条件等)。分支覆盖率检查你是否为每个条件(if、while、for)执行了true和false分支。你将有两倍于条件的分支。
你为什么要关心这个问题呢?考虑一下这个例子:

public int getNameLength(boolean isCoolUser) {
    User user = null;
    if (isCoolUser) {
        user = new John(); 
    }
    return user.getName().length(); 
}

如果你在isCoolUser设置为true的情况下调用这个方法,你会得到100%的语句覆盖率。听起来不错吧?不,如果你用false调用,会有一个空指针。然而,在第一种情况下,你有50%的分支覆盖率,所以你可以看到在你的测试中(通常是在你的代码中)缺少了一些东西。

jq6vz3qz

jq6vz3qz2#

以下代码是一个简化的示例:

if(cond) {
    line1();
    line2();
    line3();
    line4();
} else {
    line5();
}

如果您的测试仅检验cond是否为真,并且从未运行else分支则您具有:

  • 覆盖5行中的4行
  • 覆盖2个分支中的1个

此外,Cobertura report本身也引入了一些不错的弹出帮助工具提示,当单击列标题时:

行覆盖率-此测试运行执行的行的百分比。
分支覆盖率-此测试运行执行的分支的百分比。

gkl3eglg

gkl3eglg3#

if(cond){
    //branch 1
}else{  
    //branch 2
}

您需要处理分支1和分支2中的所有行,以获得LineCoverage和BranchCoverage的100%覆盖率。
如果你在else中遗漏了任何内容,你将得到分支覆盖率的一半;如果你在if和else中遗漏了# of lines中的任何内容,你将得到100%的BranchCoverage,而不是100%的行覆盖率。
希望这个有用。

相关问题