我使用Cobertura Maven插件进行我的一个项目。但我对生成的报告有疑问:
线和分支覆盖范围有什么区别?
答案 0 :(得分:128)
行覆盖率衡量您所采用的语句数量(语句通常是一行代码,不包括注释,条件等)。分支覆盖率检查您是否为每个条件(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%的语句覆盖率。听起来不错? NOPE,如果你用false
打电话,会有一个空指针。但是,在第一种情况下,您有50%的分支覆盖率,因此您可以看到测试中缺少某些内容(通常在代码中)。
答案 1 :(得分:54)
将此代码作为简化示例:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
如果您的测试仅执行cond
为真,并且永远不会运行else
分支:
当点击列标题时,Cobertura report本身也会引入一些不错的弹出式帮助工具提示:
行覆盖率 - 此测试运行执行的行数百分比。
分支覆盖率 - 此测试运行执行的分支百分比。
答案 2 :(得分:2)
if(cond){
//branch 1
}else{
//branch 2
}
您需要解决所有行是分支1和分支2才能获得LineCoverage和BranchCoverage的100%覆盖率。
如果你完全没有错过任何其他内容,你将获得一半的分支覆盖率。 如果您错过了if和else中的#行中的任何内容,那么您将获得100%的BranchCoverage,但不会获得100%的行覆盖率。
希望这有帮助。