Try Golang! カバレッジレポートのグレーの行はいったい何もの!?
Golang coverage can also count the number of passes
Goは標準のテストツールでカバレッジレポートを作成できるので、利用している人も多いかと思います。テストで通った行はグリーン。テストで通らなかったところはレッド。一目瞭然です。
ところが先日、トラック対象外の行でもないのに、グレーの行を見つけてしまいました(下図)。通ったの?通ってないの?どっちなんだい!?
通っていました!
結論から言うと、通っていました。私が知らなかっただけなのですが、実はGoのテストツールは通過回数をカウントするモードがあり、そのモードでテストを実行した場合、通過回数が多い行は鮮やかなグリーンで、通過回数の少ない行はグレーで表示されるのです。
このモードはgo test
コマンドの-covermode
オプションで指定します。デフォルトのset
は通過有無のみ、count
は通過回数をカウント、atomic
も通過回数をカウントしますがマルチスレッドテストでも正確にカウントできるようになります。ちなみに-race
オプションを指定した場合は、デフォルト値がatomic
になるので、-covermode
オプションを指定しなくてもカウントされます。
よくよく見ると、、、
実は、通過回数を色で表示することは、ヘッダにちゃんと書いています。
実際に、通過回数を調整してテストするとこんな感じになります。0~9の数字について、1回ずつ引数に指定した結果です。
また、行にカーソルを合わせると通過回数を確認できます。
唐突にグレーの行を目にしても、もう驚かないで済みますね!