开发::覆盖有条件三元运算符的分支覆盖



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

率,即

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

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

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

谢谢

您没有获得三元错误分支的覆盖率,因为您的测试未涵盖@rgb为空的情况。在这种情况下,将永远不会调用 map,但它将返回undef(或@ikegami建议的())。

三元与此相同:

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

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

您有以下几种选择:

  • 使用空列表,像池上建议的那样删除三元,并考虑到如果程序没有元素,则无法确保程序@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';
    

最新更新