线路和分行覆盖的差异
我为我的一个项目使用了Cobertura Maven插件。 但是我对生成的报告有一个疑问:
线路和分行覆盖有什么区别?
线路覆盖率可以衡量您使用了多less个语句(语句通常是一行代码,不包括注释,条件等)。 如果您为每个条件(if,while,for)使用true和false分支,分支覆盖检查。 你将有两倍的分支条件。
你为什么在乎? 考虑一下这个例子:
public int getNameLength(boolean isCoolUser) { User user = null; if (isCoolUser) { user = new John(); } return user.getName().length(); }
如果您将isCoolUser
设置为true
,调用此方法, isCoolUser
可以获得100%的语句覆盖率。 听起来不错? NOPE,如果你用false
调用,将会有一个空指针。 然而,在第一种情况下,你有50%的分支机构覆盖率,所以你可以看到你的testing(通常在你的代码中)缺less一些东西。
把这个代码作为一个简单的例子:
if(cond) { line1(); line2(); line3(); line4(); } else { line5(); }
如果你的testing只执行cond
为真,并且从不运行else
分支,你有:
- 覆盖了5条线中的4条
- 覆盖2个分支中的1个
另外,Cobertura 报告本身在单击列标题时引入了一些很好的popup式帮助工具提示:
线覆盖率 – 此testing运行执行的线的百分比。
分支覆盖率 – 通过此testing运行执行的分支的百分比。
if(cond){ //branch 1 }else{ //branch 2 }
您需要解决所有行是分行1和分行2以获得LineCoverage和BranchCoverage的100%覆盖率。
如果你完全错过了其他任何东西,你会得到一半的分支机构。 如果您在if和else中都错过了#中的任何一行,您将获得100%的BranchCoverage,但不是100%的线覆盖率。
希望这可以帮助。