2020年1月5日日曜日

golang でテストさせたくないファイルを無視する方法

概要

例えばスタブとして作ったコードや自動生成させたコードはテストしたくないと思います
パッケージ自体が完全に分かれている場合はテスト時にパッケージを指定しなければいいのですが同一パッケージにある自動生成のファイルはそうはいきません
同一パッケージ内でテストをさせたくないファイルがある場合に有効です

環境

  • 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 件のコメント:

コメントを投稿