Test-Driven Development (TDD) Best Practices
This skill guides rigorous test-first development following the Red-Green-Refactor cycle.
When to Use
Activate when:
- •Implementing new features
- •Fixing bugs
- •Refactoring existing code
- •Making any code changes
TDD Core Principles
Red-Green-Refactor Cycle
- •Red - Write tests FIRST before implementation
- •Green - Write minimal code to pass tests
- •Refactor - Clean up while keeping tests green
Test Quality Standards
Write Tests First:
- •Tests should be minimal and focused on single behaviors
- •Tests are documentation - they clearly show expected behavior
- •If you can't easily test it, the design is wrong - refactor for testability
Test Organization:
- •Use table-driven tests for multiple inputs/scenarios in Go
- •Test file naming:
*_test.gofor unit tests,e2e_test.gofor integration - •Always test error cases and edge conditions
Test Types:
- •Unit tests - Mock external dependencies (network, filesystem, time)
- •Integration tests - Validate real component interactions
- •End-to-end tests - Cover critical user workflows
Assertion Libraries
Go Testing:
- •Use
testify/requirefor assertions that should stop test execution - •Use
testify/assertfor assertions that should continue test execution
Design for Testability
✅ Testable patterns:
- •Dependency injection
- •Interface-based abstractions
- •Pure functions
- •Isolated side effects
❌ Hard to test (redesign):
- •Global state
- •Hidden dependencies
- •Tight coupling
- •Side effects mixed with logic
TDD Workflow
- •Write failing test(s) embodying acceptance criteria
- •Run tests - verify they fail for the right reason
- •Implement minimal code to make tests pass
- •Run tests - verify they all pass
- •Refactor for quality while keeping tests green
- •Repeat
Quality Gates
Before considering work "done":
- • All tests pass locally and in CI
- • Coverage ≥ 90% lines/branches
- • Error cases are tested
- • Edge conditions are tested
- • Tests document expected behavior clearly