105

プロジェクトの1つにCoberturaMavenプラグインを使用しています。しかし、生成されたレポートについて質問があります。

ラインカバレッジとブランチカバレッジの違いは何ですか?

4

3 に答える 3

203

行カバレッジは、実行したステートメントの数を測定します(ステートメントは通常、コメントや条件などを含まないコード行です)。ブランチカバレッジは、条件ごとに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%のブランチカバレッジがあるため、テスト(および多くの場合、コード)に何かが欠けていることがわかります。

于 2011-11-22T15:56:24.020 に答える
64

このコードを簡単な例として取り上げます。

if(cond) {
    line1();
    line2();
    line3();
    line4();
} else {
    line5();
}

あなたのテストが真実であることを行使するだけで、あなたが持っているブランチをcond決して実行しない場合:else

  • カバーされた5行のうち4行
  • 対象となる2つのブランチのうち1つ

また、Coberturaレポート自体は、列ヘッダーがクリックされたときにいくつかの優れたポップアップヘルプツールチップを導入しています。

LineCoverage-このテスト実行によって実行された行の割合。

ブランチカバレッジ-このテスト実行によって実行されたブランチの割合。

于 2011-11-22T15:27:29.297 に答える
3
if(cond){
    //branch 1
}else{  
    //branch 2
}

LineCoverageとBranchCoverageの両方を100%カバーするには、ブランチ1とブランチ2のすべての回線をアドレス指定する必要があります。

他の何かを見逃した場合は、ブランチカバレッジの半分が得られます。ifとelseの両方で行数のいずれかを見逃した場合、BranchCoverageは100%になりますが、行カバレッジでは100%にはなりません。

お役に立てれば。

于 2013-04-19T18:19:22.180 に答える