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


Answers:


168

行覆盖率衡量您采取了多少条语句(一条语句通常是一行代码,不包括注释,条件等)。分支覆盖范围检查您是否对每个条件(如果,何时,用于)进行了正确和错误的分支。您的分支数将是条件分支数的两倍。

你为什么在乎?考虑示例:

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

如果调用此方法isCoolUser设置为true,你会得到100%的语句覆盖率。听起来不错?NOPE,如果您使用调用,将会有一个空指针false。但是,在第一种情况下,您的分支覆盖率为50%,因此您可以看到测试中(通常在代码中)缺少某些内容。


8
好答案!它显示了行覆盖率何时给人以错误的感觉,那就是拥有好的代码!
MAGx2 2014年

由于行覆盖率或分支覆盖率,您可能会遇到哪些错误?
Emna Ayadi

61

将此代码作为简化示例:

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

如果您的测试仅行使cond真实性,而从不运行else分支,则您拥有:

  • 5条线中的4条覆盖
  • 2个分支中有1个

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

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

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


我希望写出这个答案,但您(多年以来)抢占了我。明确的答案。谢谢。
Soundararajan

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

您需要处理分支1和分支2的所有行,以同时获得LineCoverage和BranchCoverage的100%覆盖率。

如果您根本错过了其他任何内容,那么您将获得分支机构覆盖率的一半。如果在if和else中都错过了#行中的任何内容,则您将获得100%的BranchCoverage,但行覆盖率不是100%。

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.