Running Tests in Subdirectories in Go
Keeping your workspace organized by placing tests and examples in subdirectories is an efficient approach. This article explores the feasibility and steps required to achieve this in Go.
Testing in Subdirectories
Go allows you to run tests from subdirectories by specifying the full path using "./...":
go test ./...
This command will scan all subdirectories for packages and execute the tests within them. However, there are some implications to consider.
Package Access and Visibility
When placing test files in subdirectories, it's important to prefix exported variables and functions with the package name for the test file to access the exported contents. Non-exported members will not be accessible.
go test vs. go test -cover
When using go test -cover for code coverage, it's crucial to use -coverpkg=./... to collect coverage data from all packages:
go test -coverpkg=./... ./...
Integration Tests
Since Go 1.20, integration tests are now supported for coverage profiling. Use -cover while building the executable and GOCOVERDIR to specify the location for coverage data:
go build -cover -o myprogram.exe myprogram.go mkdir somedata GOCOVERDIR=somedata ./myprogram.exe
Alternate Approach
You can also separate tests into a different package without placing them in a subdirectory. For example, tests for package "foo" can reside in package "foo_test" within the same directory, ensuring access to only the exported members of "foo."
Conclusion
While running tests from subdirectories is technically possible, it may not be the best practice for organization and accessibility. The alternative approach of creating a separate test package within the same directory is a viable option for managing tests more efficiently.
The above is the detailed content of Can You Run Tests in Subdirectories in Go?. For more information, please follow other related articles on the PHP Chinese website!