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

Gil*_*e59 88 testing cobertura maven test-coverage

我使用Cobertura Maven插件进行我的一个项目.但我对生成的报告有疑问:

线路和分支覆盖范围有什么区别?

Kan*_*ane 143

行覆盖率衡量您采用的语句数量(语句通常是一行代码,不包括注释,条件等).分支覆盖率检查您是否为每个条件(if,while,for)采用了true和false分支.你的分支数量是条件数的两倍.

你为什么在乎?考虑这个例子:

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

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

  • 很棒的答案!它表明线路覆盖会给出错误的代码感觉! (7认同)

Tom*_*icz 58

以此代码为简单示例:

if(cond) {
    line1();
    line2();
    line3();
    line4();
} else {
    line5();
}
Run Code Online (Sandbox Code Playgroud)

如果你的测试只是练习cond是真的而且永远不会运行else你拥有的分支:

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

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

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

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