Perl 条件三元算子上的覆盖分支覆盖

Perl 条件三元算子上的覆盖分支覆盖,perl,devel-cover,Perl,Devel Cover,我在一个模块上运行coverfromDevel::cover,并在使用条件三元运算符的行中获得50%的分支覆盖率,即 return@rgb?映射{hex$}@rgb:unde 这样行吗?我是否必须将代码更改为使用if/else块才能获得100%的覆盖率 我是新来的Devel::Cover,所以您提供的任何关于这方面的见解都会非常有用 谢谢您没有得到三元函数错误分支的覆盖,因为您的测试没有覆盖@rgb为空的情况。在这种情况下,将永远不会调用映射,但它将返回unde(或(),就像@ikegami建议

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

return@rgb?映射{hex$}@rgb:unde

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

我是新来的
Devel::Cover
,所以您提供的任何关于这方面的见解都会非常有用


谢谢

您没有得到三元函数错误分支的覆盖,因为您的测试没有覆盖
@rgb
为空的情况。在这种情况下,将永远不会调用
映射
,但它将返回
unde
(或
()
,就像@ikegami建议的那样)

三元系与此相同:

if (@rgb) { 
  return map { hex $_ } @rgb;
} else {
  return undef;
}
所以有一个分支没有被测试覆盖

您有几个选择:

  • 使用空列表,只需删除ikegami建议的三元组,并考虑到如果
    @rgb
    没有元素,则无法确保程序执行所需的操作
  • 如中所述,添加
    #不可撤销分支false
    注释
  • 编写一个测试用例,它希望
    @rgb
    没有元素

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

如果
@rgb
为空,是否需要返回
unde
?空列表的返回值不表示相同的事情吗?1。如果
声明不会增加您的保险范围,请切换到
。2.我从您正在做的事情中所揭示的一点来猜测,但在我看来,返回一个空列表比重新调整undef更有意义。(
返回映射十六进制,@rgb;
)3。请注意,虽然做出更改将要求100%的覆盖率,但仍有一个案例您没有测试。如果我更改过程以返回空列表,我将继续获得50%的覆盖率。你认为我会得到这个分数的另一个原因吗?