プロジェクトの1つにCobertura Mavenプラグインを使用します。しかし、生成されたレポートについて質問があります。
回線カバレッジとブランチカバレッジの違いは何ですか?
行カバレッジは、取得したステートメントの数を測定します(ステートメントは通常、コメント、条件などを含まないコード行です)。ブランチカバレッジは、各条件(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%のステートメントカバレッジが得られます。いいですね? NOPE、false
で呼び出した場合、nullポインターが存在します。ただし、最初のケースでは50%のブランチカバレッジがあるため、テスト(および多くの場合、コード)で何かが欠けていることがわかります。
簡単な例としてこのコードを取り上げます。
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
テストでcond
がtrueであるだけを実行し、else
ブランチを実行しない場合:
また、Cobertura report 自体は、列ヘッダーがクリックされたときにニースのポップアップヘルプツールチップを導入します。
Line Coverage-このテスト実行で実行された行の割合。
ブランチカバレッジ-このテスト実行で実行されたブランチの割合。
if(cond){
//branch 1
}else{
//branch 2
}
LineCoverageとBranchCoverageの両方で100%のカバレッジを取得するには、ブランチ1とブランチ2のすべての回線に対処する必要があります。
あなたが他の何かを見逃した場合、あなたはブランチカバレッジの半分を得るでしょう。 ifとelseの両方で#行の行を逃した場合、BranchCoverageは100%になりますが、100%ではありません。
お役に立てれば。