snippetgoCritical
How to measure test coverage in Go
Viewed 0 times
measuretesthowcoverage
Problem
Has anyone succeeded in generating code coverage for Go unit tests? I can't find a tool for that on the web.
Solution
Note that Go 1.2 (Q4 2013, rc1 is available) will now display test coverage results:
One major new feature of
The
The cover tool does two things.
-
First, when "
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
-
Second, for more detailed reports, different flags to "go test" can create a coverage profile file, which the cover program, invoked with "
Frank Shearar mentions:
The latest versions of Go (2013/09/19) use:
Details on how to generate and analyze coverage statistics can be found by running the commands
Ivan Black mentions in the comments:
I don't even want to wait for the browser to open, so I defined this alias:
That I just type
Update 2022, possibly for Go 1.19
proposal: extend Go's code coverage testing to include applications
While the existing "
In the same way that users can build a race-detector instrumented executable using "
Merging coverage profiles produced in different GOOS/GOARCH environments will be supported.
Update March 2023, Go 1.20: "Code coverage for Go integration tests" shows that you can now build coverage-instrumented programs using “go build -cover”, then feed these instrumented binaries into an integration test to extend the scope of coverage testing.
May 2024: Thom mentions in the comments:
Additional info for blackbox testing: use flag coverpkg like this:
One major new feature of
go test is that it can now compute and, with help from a new, separately installed "go tool cover" program, display test coverage results.The
cover tool is part of the go.tools subrepository. It can be installed by running$ go get golang.org/x/tools/cmd/coverThe cover tool does two things.
-
First, when "
go test" is given the -cover flag, it is run automatically to rewrite the source for the package and insert instrumentation statements. The test is then compiled and run as usual, and basic coverage statistics are reported:$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
-
Second, for more detailed reports, different flags to "go test" can create a coverage profile file, which the cover program, invoked with "
go tool cover", can then analyze.Frank Shearar mentions:
The latest versions of Go (2013/09/19) use:
go test -coverprofile Details on how to generate and analyze coverage statistics can be found by running the commands
$ go help testflag
$ go tool cover -helpIvan Black mentions in the comments:
go test -coverprofile cover.out and thengo tool cover -html=cover.out opens cover.out in your default browserI don't even want to wait for the browser to open, so I defined this alias:
alias gc=grep -v -e " 1$" cover.outThat I just type
gc, and have a list of all the lines not yet covered (here: with a coverage.out line not ending with " 1").Update 2022, possibly for Go 1.19
proposal: extend Go's code coverage testing to include applications
While the existing "
go test" based coverage workflow will continue to be supported, the proposal is to add coverage as a new build mode for "go build".In the same way that users can build a race-detector instrumented executable using "
go build -race", it will be possible to build a coverage-instrumented executable using "go build -cover".Merging coverage profiles produced in different GOOS/GOARCH environments will be supported.
Update March 2023, Go 1.20: "Code coverage for Go integration tests" shows that you can now build coverage-instrumented programs using “go build -cover”, then feed these instrumented binaries into an integration test to extend the scope of coverage testing.
May 2024: Thom mentions in the comments:
Additional info for blackbox testing: use flag coverpkg like this:
go test -coverprofile=.coverage.html -coverpkg=your/pkg your/pkg/pkg_testCode Snippets
$ go get golang.org/x/tools/cmd/covergo test -coverprofile <filename> <package name>$ go help testflag
$ go tool cover -helpalias gc=grep -v -e " 1$" cover.outgo test -coverprofile=.coverage.html -coverpkg=your/pkg your/pkg/pkg_testContext
Stack Overflow Q#10516662, score: 248
Revisions (0)
No revisions yet.