概要
例えばスタブとして作ったコードや自動生成させたコードはテストしたくないと思います
パッケージ自体が完全に分かれている場合はテスト時にパッケージを指定しなければいいのですが同一パッケージにある自動生成のファイルはそうはいきません
同一パッケージ内でテストをさせたくないファイルがある場合に有効です
環境
- macOS 10.15.2
- golang 1.12.9
流れ
流れとしてはテスト時にはカバレッジは算出せずテスト後にカバレッジだけ後から算出します
カバレッジを算出する際に算出対象のコードを指定する感じです
coverprofile を使ってプロファイルを取得する
go test . -coverprofile cover.out.tmp
プロファイルからカバレッジを算出しないソースを除外する
cat cover.out.tmp | grep -v "fake_" > cover.out
この「cover.out」に含まれているソースファイルだけがカバレッジの算出対象になります
上出来は grep -v
で除外していますが grep を使って絞り込んでも OK です
この段階で test 時に生成した cover.out.tmp は不要なので削除して OK です
rm -f cover.out.tmp
カバレッジを算出する
go tool cover -func cover.out
これでプロファイルに記載されているソースコードのみカバレッジの算出対象になります
go tool cover
というカバレッジを算出するツールがありこれはテスト自体は行わずカバレッジだけを算出することができます
最後に
毎回このコマンドを打つのは面倒なので Makefile などにしましょう
また cover.out.tmp と cover.out は毎回動的に生成したほうが良いです
なぜならテスト対象のソースコードが増える可能性があるからです
ただ git で管理する必要はないので .gitignore
に含めておきましょう
正確には一旦すべてのファイルでテストしてそこからカバレッジを算出したいソースだけを絞り込む感じの方式なのでそれは認識しておきましょう
0 件のコメント:
コメントを投稿