线路和分行覆盖的差异

我为我的一个项目使用了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%的线覆盖率。

希望这可以帮助。