2015-02-02 4 views
1

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

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

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

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

Благодаря

+1

Вам нужно вернуть 'undef', если' @ rgb' пуст? Не будет ли возвратная ценность пустого списка одинаковой? –

+2

1. Переключение на оператор 'if' не увеличивает ваш охват. 2. Я предполагаю, что мало что видно из того, что вы делаете, но мне кажется, что возврат пустого списка имеет гораздо больший смысл, чем перенастройка undef. ('return map hex, @rgb;') 3. Обратите внимание, что при внесении этого изменения будет требоваться 100% -ый охват, есть еще случай, который вы не тестируете. – ikegami

+0

Если я изменю процедуру, чтобы вернуть пустой список, я получаю 50% покрытия. Вы думаете о другой причине, почему я могу получить этот бал? – quicoju

ответ

3

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

Тройная так же, как это:

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

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

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

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

    is foo('no_rgbs'), undef, 'returns undef when there are no elements'; 
    
Смежные вопросы