Comprehensive Go testing patterns for writing reliable, maintainable tests following TDD methodology.
When to Activate
- Writing new Go functions or methods
- Adding test coverage to existing code
- Creating benchmarks for performance-critical code
- Implementing fuzz tests for input validation
- Following TDD workflow in Go projects
TDD Workflow for Go
The RED-GREEN-REFACTOR Cycle
Step-by-Step TDD in Go
Table-Driven Tests
The standard pattern for Go tests:
With Error Cases
Benchmarks
Basic Benchmarks
Benchmark with Different Sizes
Fuzzing (Go 1.18+)
Test Coverage
Coverage Targets
HTTP Handler Testing
Best Practices
DO:
- Write tests FIRST (TDD)
- Use table-driven tests for comprehensive coverage
- Test behavior, not implementation
- Use
t.Helper() in helper functions
- Use
t.Parallel() for independent tests
- Clean up resources with
t.Cleanup()
- Use meaningful test names that describe the scenario
DON’T:
- Test private functions directly (test through public API)
- Use
time.Sleep() in tests (use channels or conditions)
- Ignore flaky tests (fix or remove them)
- Mock everything (prefer integration tests when possible)
- Skip error path testing
Tests are documentation. They show how your code is meant to be used. Write them clearly and keep them up to date.