Comprehensive Code Coverage Reporting in Go
In Go development, obtaining individual package coverage reports is straightforward using the -cover flag. However, gaining a holistic view of coverage across multiple packages can be challenging.
To address this issue, Go 1.10 introduced a significant improvement in code coverage reporting. The -coverpkg flag now accepts a comma-separated list of patterns to match against package dependencies, allowing you to target specific areas for coverage analysis.
To generate a comprehensive coverage report, you can now execute the following commands:
go test -v -coverpkg=./... -coverprofile=profile.cov ./... go tool cover -func profile.cov
This approach will gather coverage data for all packages that match the ./... pattern and generate a consolidated report that includes detailed coverage information.
Legacy Solution for Older Go Versions
Prior to Go 1.10, obtaining comprehensive coverage reports required a different approach. One such solution, implemented in bash, can be found in the gosweep project on GitHub:
#!/bin/bash set -e echo 'mode: count' > profile.cov for dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d); do if ls $dir/*.go > /dev/null; then go test -short -covermode=count -coverprofile=$dir/profile.tmp $dir if [ -f $dir/profile.tmp ] then cat $dir/profile.tmp | tail -n +2 >> profile.cov rm $dir/profile.tmp fi fi done go tool cover -func profile.cov
This script recursively searches for directories containing Go packages, executes go test with coverage enabled, and aggregates the individual coverage reports into a single profile.cov file. After generating the coverage data, you can use go tool cover -func profile.cov to display a detailed report.
The above is the detailed content of How Can I Generate Comprehensive Code Coverage Reports in Go?. For more information, please follow other related articles on the PHP Chinese website!