Devel:: Покрытие ветви покрытия на условном троичном операторе

Я бегу cover от Devel::Cover на модуле и получение 50% покрытия веток в строках, которые используют условный троичный оператор, т.е.

return @rgb ? map { hex $_ } @rgb : undef;

Это нормально? Должен ли я изменить код, чтобы использовать if/else блоки для того, чтобы получить 100% покрытия?

Я новичок в Devel::Cover поэтому любое понимание, которое вы могли бы предоставить по этому поводу, будет действительно полезным.

Спасибо

1 ответ

Решение

Вы не получаете покрытие для ложной ветви троичного, потому что ваши тесты не охватывают случай, когда @rgb пустой. В этом случае map никогда не будет вызван, но он вернется undef (или же () как @ikegami предложил).

Троица такая же, как эта:

if (@rgb) { 
  return map { hex $_ } @rgb;
} else {
  return undef;
}

Так что есть ветка, которая не была покрыта тестом.

У вас есть несколько вариантов:

  • перейдите с пустым списком и просто удалите троичную, как предложено Ikegami, и учтите, что вы не гарантируете, что программа делает то, что вы хотите, если @rgb не имеет элементов
  • добавить # uncoverable branch false комментарий, как описано в https://metacpan.org/pod/Devel::Cover
  • написать тестовый пример, где он ожидает @rgb не иметь элементов

    is foo('no_rgbs'), undef, 'returns undef when there are no elements';
    
Другие вопросы по тегам