回答:
行カバレッジは、実行したステートメントの数を測定します(ステートメントは通常、コメント、条件などを含まないコード行です)。ブランチカバレッジは、条件付き(if、while、for)ごとにtrueとfalseのブランチをとったかどうかをチェックします。分岐は条件付きの2倍になります。
なんで気にするの?例を考えてみましょう:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
このメソッドをにisCoolUser
設定して呼び出すとtrue
、ステートメントのカバレッジが100%になります。いいですね?いいえ、で呼び出した場合、nullポインタが存在しますfalse
。ただし、最初のケースでは50%のブランチカバレッジがあるため、テスト(および多くの場合、コード)に欠けているものがあることがわかります。
このコードを簡単な例として考えてみましょう:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
あなたのテストcond
が真実のみを行使し、else
あなたが持っているブランチを決して実行しない場合:
また、Cobertura レポート自体には、列ヘッダーがクリックされたときにいくつかの素晴らしいポップアップヘルプツールチップが導入されています。
行カバレッジ -このテスト実行によって実行された行の割合。
ブランチカバレッジ -このテスト実行で実行されたブランチの割合。
if(cond){
//branch 1
}else{
//branch 2
}
LineCoverageとBranchCoverageの両方を100%カバーするには、すべての回線をブランチ1とブランチ2にアドレス指定する必要があります。
他で何かを見逃した場合、ブランチのカバレッジの半分を取得します。ifとelseの両方で#の行で何かを見逃した場合、100%ではなく100%のBranchCoverageが得られます。
お役に立てれば。