2.1 KiB
2.1 KiB
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