AngularJSプロジェクトの単体テストのコードカバレッジに Istanbul を使用します。カバレッジには4つのタイプがあり、それらは
ステートメント、関数、行は大丈夫ですが、「ブランチ」が何であるか理解できません。ブランチとは何ですか?
ブランチは、ランタイムが1つのパスを取るか別のパスを取るかを選択できる場所です。次の例を見てみましょう。
_if(a) {
Foo();
}
if(b) {
Bar();
}
Yay();
_
最初の行に到達すると、if(a)
- statementの本文内に移動するかどうかを決定できます。また、それをしないこともできます。この段階では、すでに2つのパス(1つのブランチ)が表示されています。
その後の次のステートメントはより興味深いものになります。 if
本体の内部に移動して、Bar
を実行できます。それもできません。ただし、以前にブランチを作成したことがあることを忘れないでください。 Foo
が呼び出されたかどうかによって、結果は異なる場合があります。
したがって、次の4つの可能なパスになります。
Foo
を呼び出さない、またはBar
を呼び出さないFoo
を呼び出すのではなく、Bar
を呼び出すFoo
を呼び出さない、Bar
を呼び出すFoo
とBar
の両方を呼び出すYay
またはFoo
が呼び出されたかどうかに関係なく、最後のBar
が常に実行されるため、ブランチとしてカウントされません。したがって、上記のコードスニペットには、4つのパス/ 2つのブランチが含まれています(Foo()
を呼び出すかどうか、Bar()
を呼び出すかどうか)。
すでに言及した他の回答と同様に、分岐を引き起こす可能性のあるステートメントが多数あります(if
/switch
)。 while
/for
/_do-while
_などの条件ループ、または短絡(例_&&
_/_||
_)演算子のいずれかを忘れないでください。
コードカバレッジツールは、すべてのブランチをテストしたことを確認する必要があります。最良の方法は、ブランチだけでなく、すべてのパス、またはすべての(エッジケース)値さえテストされている場合です。これにより、不要な動作が実行されないようにします。
コードが複数のルートを取ることができる場所、つまり分岐します。分岐ステートメントのいくつかの例は、if
/else
およびswitch
ステートメントです。
ブランチカバレッジは、これらのブランチのどれが実行されたかを追跡するため、すべてのルートが適切にテストされていることを確認できます。
から ウィキペディア :
各制御構造の各ブランチ(DDパスとも呼ばれます)(ifステートメントやcaseステートメントなど)が実行されましたか?たとえば、ifステートメントを指定すると、trueブランチとfalseブランチの両方が実行されましたか?別の言い方をすると、プログラムのすべてのEdgeが実行されたということです。
各制御構造について、考えられるすべてのケースをテストする必要があります(ifステートメント、つまりスイッチのすべてのケースに入力/入力しない)。ブランチカバレッジは、テストがカバーするブランチの合計数を測定するメトリックです(通常はパーセンテージ)。