我将 Cobertura Maven 插件用于我的一个项目。但我对生成的报告有疑问:
线路覆盖率和分支覆盖率有什么区别?
我将 Cobertura Maven 插件用于我的一个项目。但我对生成的报告有疑问:
线路覆盖率和分支覆盖率有什么区别?
行覆盖率衡量您使用了多少语句(语句通常是一行代码,不包括注释、条件等)。分支覆盖检查您是否为每个条件(if、while、for)采用了 true 和 false 分支。您将拥有两倍于条件的分支。
你为什么在乎?考虑这个例子:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
如果您使用isCoolUser
set to调用此方法true
,您将获得 100% 的语句覆盖率。听起来不错?不,如果你用false
. 但是,在第一种情况下,您有 50% 的分支覆盖率,因此您可以看到在您的测试中(通常是在您的代码中)缺少一些东西。
以这段代码为例:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
如果您的测试只练习cond
真实性并且从不运行else
您拥有的分支:
当单击列标题时, Cobertura报告本身还引入了一些不错的弹出帮助工具提示:
Line Coverage - 此测试运行执行的行的百分比。
分支覆盖率- 此测试运行执行的分支的百分比。
if(cond){
//branch 1
}else{
//branch 2
}
您需要解决所有线路是分支 1 和分支 2,以获得 LineCoverage 和 BranchCoverage 的 100% 覆盖。
如果您完全错过其他任何内容,您将获得一半的分支覆盖率。如果您在 if 和 else 中都错过了 # of lines 中的任何内容,您将获得 100% 的 BranchCoverage 但不是 100% 的行覆盖率。
希望这可以帮助。