5 advanced testing techniques in Go
- Use test suites - develop tests written against an interface for all implementations of that interface.
- Carefully consider interfaces before exporting them and avoid creating a hard dependency between a consumer package and your own. To avoid exporting an interface, use an internal/package subtree to keep the interface scoped to the package.
- Don’t export concurrency primitives, especially channels and the sync package. Also, add documentation on whether a struct or package is safe for concurrent access by multiple goroutines.
- Use net/http/httptest to speed up tests and run them in parallel more easily, without binding to a port or setting up a server.
- Use a separate _test package inside the foo/ directory of the package you want to test, rather than the default package pkg. This is a workaround for cyclic dependencies, prevents brittle tests and lets you see what it is like to consume your own package.
Full post here, 8 mins read