首页 文章

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

提问于
浏览
1

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

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

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

我是 Devel::Cover 的新手,所以你能提供的关于此的任何见解都会非常有帮助 .

谢谢

1 回答

  • 3

    您没有获得三元组的假分支的覆盖范围,因为您的测试不包括 @rgb 为空的情况 . 在这种情况下, map 将永远不会被调用,但它将返回 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';
    

相关问题