プロジェクトの1つにCoberturaMavenプラグインを使用しています。しかし、生成されたレポートについて質問があります。
ラインカバレッジとブランチカバレッジの違いは何ですか?
プロジェクトの1つにCoberturaMavenプラグインを使用しています。しかし、生成されたレポートについて質問があります。
ラインカバレッジとブランチカバレッジの違いは何ですか?
行カバレッジは、実行したステートメントの数を測定します(ステートメントは通常、コメントや条件などを含まないコード行です)。ブランチカバレッジは、条件ごとにtrueブランチとfalseブランチを取得したかどうかをチェックします(if、while、for)。条件付きの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レポート自体は、列ヘッダーがクリックされたときにいくつかの優れたポップアップヘルプツールチップを導入しています。
LineCoverage-このテスト実行によって実行された行の割合。
ブランチカバレッジ-このテスト実行によって実行されたブランチの割合。
if(cond){
//branch 1
}else{
//branch 2
}
LineCoverageとBranchCoverageの両方を100%カバーするには、ブランチ1とブランチ2のすべての回線をアドレス指定する必要があります。
他の何かを見逃した場合は、ブランチカバレッジの半分が得られます。ifとelseの両方で行数のいずれかを見逃した場合、BranchCoverageは100%になりますが、行カバレッジでは100%にはなりません。
お役に立てれば。