Cobertura Maven中的直线和分支覆盖之间有什么区别?
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%的分支覆盖率,所以你可以看到在你的测试中(通常是在你的代码中)缺少了一些东西。
isCoolUser
true
false
jq6vz3qz2#
以下代码是一个简化的示例:
if(cond) { line1(); line2(); line3(); line4(); } else { line5(); }
如果您的测试仅检验cond是否为真,并且从未运行else分支则您具有:
cond
else
此外,Cobertura report本身也引入了一些不错的弹出帮助工具提示,当单击列标题时:
行覆盖率-此测试运行执行的行的百分比。分支覆盖率-此测试运行执行的分支的百分比。
gkl3eglg3#
if(cond){ //branch 1 }else{ //branch 2 }
您需要处理分支1和分支2中的所有行,以获得LineCoverage和BranchCoverage的100%覆盖率。如果你在else中遗漏了任何内容,你将得到分支覆盖率的一半;如果你在if和else中遗漏了# of lines中的任何内容,你将得到100%的BranchCoverage,而不是100%的行覆盖率。希望这个有用。
3条答案
按热度按时间eiee3dmh1#
行覆盖率衡量你执行了多少语句(语句通常是一行代码,不包括注解、条件等)。分支覆盖率检查你是否为每个条件(if、while、for)执行了true和false分支。你将有两倍于条件的分支。
你为什么要关心这个问题呢?考虑一下这个例子:
如果你在
isCoolUser
设置为true
的情况下调用这个方法,你会得到100%的语句覆盖率。听起来不错吧?不,如果你用false
调用,会有一个空指针。然而,在第一种情况下,你有50%的分支覆盖率,所以你可以看到在你的测试中(通常是在你的代码中)缺少了一些东西。jq6vz3qz2#
以下代码是一个简化的示例:
如果您的测试仅检验
cond
是否为真,并且从未运行else
分支则您具有:此外,Cobertura report本身也引入了一些不错的弹出帮助工具提示,当单击列标题时:
行覆盖率-此测试运行执行的行的百分比。
分支覆盖率-此测试运行执行的分支的百分比。
gkl3eglg3#
您需要处理分支1和分支2中的所有行,以获得LineCoverage和BranchCoverage的100%覆盖率。
如果你在else中遗漏了任何内容,你将得到分支覆盖率的一半;如果你在if和else中遗漏了# of lines中的任何内容,你将得到100%的BranchCoverage,而不是100%的行覆盖率。
希望这个有用。