4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goで自動生成ファイルをtest coverageの計測対象から除外する方法

Posted at

概要

gRPCなどを使用していると、Goの自動生成ファイルを使用することになると思います。

その際、go test コマンドは、.goという拡張子のすべてのファイルをtest coverageの計測対象とするため、CIなどでtest coverageを計測している場合、この自動生成ファイルまでtest coverageの分母に入ってしまい、意味のある数字が得られなくなると思います。

そこで、それに対処する方法を解説します。

やり方

前提として、go test コマンド自体に、特定のファイルを除外するようなオプションはありません。
なので、go testの生成ファイルから、除外したいファイルに関する記述をgrepして除外していくことになります。

.sh
$ go test . -coverprofile cover.out.tmp                  
# "_generated.go"の部分は、自動生成ファイルのファイル名の形式に合わせて変更する
$ cat cover.out.tmp | grep -v "_generated.go" > cover.out
$ rm -f cover.out.tmp
$ go tool cover -func cover.out

コピペ用

理解しやすい用に上記で一行ずつのコマンドを記載しましたが、実際はまとめて実行する場合が多いと思うので、コピペして実行する際は下記がおすすめです。

.sh
$ TEMP_COVER_OUT=$(mktemp); go test ./... -coverprofile $TEMP_COVER_OUT; cat $TEMP_COVER_OUT | grep -v "pb.go" > cover.out; rm $TEMP_COVER_OUT
$ go tool cover -html=cover.out

参考

[How to ignore Generated files from Go test coverage] (https://stackoverflow.com/questions/50065448/how-to-ignore-generated-files-from-go-test-coverage)

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?