68 lines
1.8 KiB
Markdown
68 lines
1.8 KiB
Markdown
# ADR-0028: Testing Strategy
|
|
|
|
## Status
|
|
Accepted
|
|
|
|
## Context
|
|
The platform needs a comprehensive testing strategy:
|
|
- Unit tests for individual components
|
|
- Integration tests for full flows
|
|
- Contract tests for API compatibility
|
|
- Load tests for performance
|
|
|
|
Testing tools and approaches vary in complexity and coverage.
|
|
|
|
## Decision
|
|
Adopt a **multi-layered testing approach**:
|
|
|
|
1. **Unit tests**:
|
|
- Tool: Standard `testing` package + `testify`
|
|
- Coverage: >80% for core modules
|
|
- Mocks: `mockery` or `mockgen`
|
|
- Fast execution (< 1 second)
|
|
|
|
2. **Integration tests**:
|
|
- Tool: `testcontainers-go` for Docker-based services
|
|
- Coverage: End-to-end flows (auth, modules, etc.)
|
|
- Infrastructure: PostgreSQL, Redis, Kafka via testcontainers
|
|
- Tagged: `//go:build integration`
|
|
|
|
3. **Contract tests**:
|
|
- Tool: OpenAPI validator (`kin-openapi`)
|
|
- Coverage: API request/response validation
|
|
- Optional: Pact for service contracts
|
|
|
|
4. **Load tests**:
|
|
- Tool: k6 or vegeta
|
|
- Coverage: Critical endpoints (auth, API)
|
|
- Performance benchmarks
|
|
|
|
**Rationale:**
|
|
- Comprehensive coverage across layers
|
|
- Fast feedback with unit tests
|
|
- Realistic testing with integration tests
|
|
- API compatibility with contract tests
|
|
- Performance validation with load tests
|
|
|
|
## Consequences
|
|
|
|
### Positive
|
|
- High confidence in code quality
|
|
- Fast unit tests for quick feedback
|
|
- Realistic integration tests
|
|
- API compatibility guaranteed
|
|
|
|
### Negative
|
|
- Integration tests are slower
|
|
- Requires Docker for testcontainers
|
|
- More complex CI setup
|
|
|
|
### Implementation Notes
|
|
- Use `testify` for assertions: `require` and `assert`
|
|
- Generate mocks with `mockery` or `mockgen`
|
|
- Create test helpers in `internal/testutil/`
|
|
- Use test tags: `go test -tags=integration ./...`
|
|
- Run integration tests in separate CI job
|
|
- Document testing approach in `CONTRIBUTING.md`
|
|
|