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
fromDevel::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%的覆盖率。你认为我会得到这个分数的另一个原因吗?