Devel::Cover 条件三元运算符的分支覆盖

Devel::Cover Branch coverage on conditional ternary operator

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

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

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

我是 Devel::Cover 的新手,所以您能提供的任何见解都将非常有帮助。

谢谢

您没有覆盖三元的 false 分支,因为您的测试没有覆盖 @rgb 为空的情况。在那种情况下,map 将永远不会被调用,但它会 return 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';