Testing Guide
This skill provides testing pyramid standards and best practices for systematic testing.
Quick Reference
Testing Pyramid
code
┌─────────┐
│ E2E │ ← Fewer, slower (3%)
─┴─────────┴─
┌─────────────┐
│ ST │ ← System (7%)
─┴─────────────┴─
┌─────────────────┐
│ IT │ ← Integration (20%)
─┴─────────────────┴─
┌─────────────────────┐
│ UT │ ← Unit (70%)
└─────────────────────┘
Test Levels Overview
| Level | Scope | Speed | Dependencies |
|---|---|---|---|
| UT | Single function/class | < 100ms | Mocked |
| IT | Component interaction | 1-10s | Real DB (containerized) |
| ST | Full system | Minutes | Production-like |
| E2E | User journeys | 30s+ | Everything real |
Coverage Targets
| Metric | Minimum | Recommended |
|---|---|---|
| Line | 70% | 85% |
| Branch | 60% | 80% |
| Function | 80% | 90% |
Detailed Guidelines
For complete standards, see:
Naming Conventions
File Naming
code
[ClassName]Tests.cs # C# [ClassName].test.ts # TypeScript [class_name]_test.py # Python [class_name]_test.go # Go
Method Naming
code
[MethodName]_[Scenario]_[ExpectedResult]() should_[behavior]_when_[condition]() test_[method]_[scenario]_[expected]()
Test Doubles
| Type | Purpose | When to Use |
|---|---|---|
| Stub | Returns predefined values | Fixed API responses |
| Mock | Verifies interactions | Check method called |
| Fake | Simplified implementation | In-memory database |
| Spy | Records calls, delegates | Partial mocking |
When to Use What
- •UT: Use mocks/stubs for all external deps
- •IT: Use fakes for DB, stubs for external APIs
- •ST: Real components, fake only external services
- •E2E: Real everything
AAA Pattern
typescript
test('method_scenario_expected', () => {
// Arrange - Setup test data
const input = createTestInput();
const sut = new SystemUnderTest();
// Act - Execute behavior
const result = sut.execute(input);
// Assert - Verify result
expect(result).toBe(expected);
});
FIRST Principles
- •Fast - Tests run quickly
- •Independent - Tests don't affect each other
- •Repeatable - Same result every time
- •Self-validating - Clear pass/fail
- •Timely - Written with production code
Anti-Patterns to Avoid
- •❌ Test Interdependence (tests must run in order)
- •❌ Flaky Tests (sometimes pass, sometimes fail)
- •❌ Testing Implementation Details
- •❌ Over-Mocking
- •❌ Missing Assertions
- •❌ Magic Numbers/Strings
Configuration Detection
This skill supports project-specific configuration.
Detection Order
- •Check
CONTRIBUTING.mdfor "Disabled Skills" section- •If this skill is listed, it is disabled for this project
- •Check
CONTRIBUTING.mdfor "Testing Standards" section - •If not found, default to standard coverage targets
First-Time Setup
If no configuration found and context is unclear:
- •Ask the user: "This project hasn't configured testing standards. Would you like to customize coverage targets?"
- •After user selection, suggest documenting in
CONTRIBUTING.md:
markdown
## Testing Standards ### Coverage Targets | Metric | Target | |--------|--------| | Line | 80% | | Branch | 70% | | Function | 85% |
Configuration Example
In project's CONTRIBUTING.md:
markdown
## Testing Standards ### Coverage Targets | Metric | Target | |--------|--------| | Line | 80% | | Branch | 70% | | Function | 85% | ### Testing Framework - Unit Tests: Jest - Integration Tests: Supertest - E2E Tests: Playwright
License: CC BY 4.0 | Source: universal-dev-standards