Devel :: Cover Branch覆盖条件三元运算符

时间:2015-02-02 19:41:24

标签: perl devel-cover

我在cover上运行Devel::Cover模块,并在使用条件三元运算符的行中获得50%的分支覆盖率,即

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

这样好吗?我是否必须更改代码才能使用if/else块以获得100%的覆盖率?

我是Devel::Cover的新手,所以您可以提供的有关此问题的任何见解都会非常有用。

由于

1 个答案:

答案 0 :(得分:3)

您没有覆盖三元组的 false 分支,因为您的测试不包括@rgb为空的情况。在这种情况下,永远不会调用map,但它会返回undef(或(),如@ikegami建议的那样。)

三元与此相同:

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

所以那里有一个分支没有被测试覆盖。

您有几种选择:

  • 使用空列表,只需删除像ikegami建议的三元组,并考虑到如果@rgb没有元素,则不确保程序执行您想要的操作
  • 按照https://metacpan.org/pod/Devel::Cover#UNCOVERABLE-CRITERIA
  • 中的说明添加# uncoverable branch false条评论
  • 编写一个测试用例,期望@rgb没有元素

    is foo('no_rgbs'), undef, 'returns undef when there are no elements';