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';