Golangでカバレッジを取得するためには、単純にgo test -coverprofile
をすれば良い。そういうふうに思っていた時期がぼくにもありました。
$ go test -coverprofile=coverage.out ./... | tail -5 ? gitlab.com/eponas/epona-aws-starter-cli/internal/logging [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/template [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/terraform [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/terraform/lang [no test files] ok gitlab.com/eponas/epona-aws-starter-cli/internal/version 0.163s coverage: 6.7% of statements
ここであたかもカバレッジ(6.7%)が出力されているように見えますが、実はこのカバレッジは internal/version
パッケージのものであって、プロダクトのコード全体のものではありません。
マルチパッケージの場合のカバレッジは、どのように取得すべきなのでしょうか。
この場合は-coverpkg
オプションを使います。
$ go test -coverpkg=./... -coverprofile=coverage.out ./... | tail -5 ? gitlab.com/eponas/epona-aws-starter-cli/internal/logging [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/template [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/terraform [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/terraform/lang [no test files] ok gitlab.com/eponas/epona-aws-starter-cli/internal/version 0.296s coverage: 1.2% of statements in ./...
-coverpkg
オプションでは、カバレッジを分析するときの対象パッケージを指定できます。
ここで./...
ワイルドカードを使用すると、全てのパッケージを対象としてカバレッジ分析を行えます。
-coverpkg pattern1,pattern2,pattern3 Apply coverage analysis in each test to packages matching the patterns. The default is for each test to analyze only the package being tested. See 'go help packages' for a description of package patterns. Sets -cover.
続編。