Что такое ветвь в покрытии кода для модульного тестирования JavaScript

Я использую Стамбул для покрытия кода модульных тестов в проекте AngularJS. Есть 4 вида покрытия, и они

  • выражение
  • ветка
  • функция
  • линия

Заявление, функция и строка в порядке, но я не понимаю, что такое "ветвь". Что такое филиал?

Ответы

Ответ 1

Ветвь - это место, где среда выполнения может выбирать, будет ли она идти тем или иным путем. Давайте возьмем следующий пример:

if(a) {
    Foo();
}

if(b) {
    Bar();
}

Yay();

Достигнув первой строки, он может решить, хочет ли он войти внутрь тела if(a) -statement. Кроме того, он может решить не делать этого. На этом этапе мы уже видели два пути (одна ветка).

Следующее утверждение после этого становится более интересным. Он может зайти внутрь тела if и выполнить Bar. Это также не может сделать это. Но помните, что у нас уже был филиал раньше. Результат может отличаться, если Foo был вызван или нет.

Таким образом, мы получаем четыре возможных пути:

  • Не звонить Foo, не звонить Bar
  • Звоню Foo, не звоню Bar
  • Не звонит Foo, звонит Bar
  • Вызов и Foo и Bar

Последний Yay всегда выполняется независимо от того, был ли вызван Foo или Bar, так что это не считается ответвлением. Таким образом, фрагмент кода выше содержит четыре пути/две ветки (вызывая Foo() или нет, вызывая Bar() или нет).

Как и в других уже упомянутых ответах, существует множество операторов, которые могут вызвать switch (if/switch). Не забывайте об условных циклах, таких как while/for/do-while, или операторах короткого замыкания (например, &&/||).

Инструмент покрытия кода хочет убедиться, что вы проверили все ветки. Лучше всего было бы, если бы были проверены все пути или даже все (крайний случай) значения, а не только ветки. Это, чтобы убедиться, что нежелательное поведение не выполняется.

Ответ 2

Где-то где код может принимать более одного маршрута, т.е. Ветвится. Несколько примеров операторов ветвления - это if/else и switch.

Маршруты отслеживания веток, которые из этих веток были выполнены, чтобы вы могли обеспечить правильное тестирование всех маршрутов.

Ответ 3

Из Википедии:

Была ли выполнена каждая ветвь (также называемая DD-path) каждой структуры управления (например, в операциях if и case)? Например, с учетом оператора if, выполняются ли как истинная, так и ложная ветки? Другой способ сказать это, имеет ли каждый край в программе выполнение?

Вы должны проверить для каждой структуры управления все возможные случаи (вводить/не вводить в if заявления, fe и все случаи переключения). Отражательный охват - это показатель, который измеряет (обычно в процентах), сколько из общих отделений покрывает ваши тесты.