2

coverモジュールから実行しDevel::Coverていて、条件付き三項演算子を使用する行で分岐カバレッジの 50% を取得しています。

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

これでよろしいですか?if/else100% のカバレッジを得るには、ブロックを使用するようにコードを変更する必要がありますか?

私はDevel::Coverこれに慣れていないので、これについてあなたが提供できる洞察は本当に役に立ちます。

ありがとう

4

1 に答える 1

4

テストでは が空のケースがカバーされていないため、三項のfalseブランチのカバレッジが得られません。@rgbその場合、mapが呼び出されることはありませんが、返されますundef(または()@ikegami が提案したように)。

三項はこれと同じです:

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

そのため、テストでカバーされていないブランチがあります。

いくつかのオプションがあります:

  • @rgb空のリストを使用して、池上が提案したように三項を削除するだけで、要素がない場合にプログラムが希望どおりに動作することを保証しないことを考慮してください
  • https://metacpan.org/pod/Devel::Cover#UNCOVERABLE-CRITERIA# uncoverable branch falseで説明されているようにコメントを追加します
  • @rgb要素がないと予想されるテストケースを書く

    is foo('no_rgbs'), undef, 'returns undef when there are no elements';
    
于 2015-07-06T10:54:16.447 に答える