Eclemma: ветви пропущены в цикле for - что это значит? - PullRequest
0 голосов
/ 28 декабря 2018

Тестируя мой код, я столкнулся с вещью, которую не могу интерпретировать.Изучая покрытие кода с помощью eclemma Я нашел заголовок for-loop, который выделен желтым цветом с сообщением, читающим "1 of 2 branches missing".

Строка кода выглядит следующим образом:

    for (int i = maxIdx; i >= 0; i--) {

Тело цикла подсвечивается как покрытое (и фактически выполняется), а также предыдущие и последующие операторы, и метод отлично работает при всех возможных условиях.Заголовки других for-loops, насколько я мог заметить, выделяются желтым цветом с тем же сообщением только в тех случаях, когда тело цикла никогда не выполнялось.

В чем смысл этого сообщения?Какая ветка отсутствует?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вот как выполняется цикл for вида

for (ForInit; ForCondition; ForUpdate)
  Body

:

  1. ForInit выполняется
  2. ForCondition
    • когда false, то Body не выполняется и выполнение продолжается после цикла
    • , когда true, затем выполняется Body, ForUpdate выполняется и выполнение продолжается сшаг 2

«2 ветви» соответствуют двум вышеуказанным параметрам для ForCondition.

«1 из 2 веток отсутствует» означает, что произошла только однаиз этих вариантов, либо первый, либо второй.


В отсутствие завершите пример , который включает тело вашего цикла, трудно ответить на ваш дополнительныйвопросы

Но странно - почему тогда другие циклы, которые всегда выполняются хотя бы раз, зеленые?

И все же довольно странно - почему другие циклы всегда зеленые?

Однако, учитывая, что Body вашего цикла был выполнен, возможно, что в Body b есть выход из циклаefore ForCondition оценивается как false.

Например, с использованием последней на сегодня версии Eclipse IDE для Java 2018-12, поставляемой с EclEmma 3.1.1:

example

И, возможно, в других ваших циклах таких выходов нет:

example

Это также может объяснить

Запуск этого кода с пустым StringBuilder окрашивает его в зеленый цвет.

и

Добавление искусственно созданной ситуации с пустым StringBuilder(в реальности это невозможно) окрашивает цикл в зеленый цвет.

из-за добавленного случая, когда ForCondition оценивается как false перед выполнением Body:

example

0 голосов
/ 28 декабря 2018

Я предполагаю, что отсутствующие ветви относятся к условию i >= 0.Поскольку i инициализируется положительным значением maxIdx (согласно комментариям), вам, вероятно, также следует добавить тестовые случаи для maxIdx из 0 и отрицательного значения maxIdx.

. Обратите внимание, что, посколькуmaxIdx - это длина StringBuilder (согласно комментариям), это может быть невозможно, и вам придется либо жить с отсутствующей веткой, либо «искусственно» реорганизовать свой код, чтобы вы могли передатьотрицательный maxIdx.

...