From ai-dev
Knowledge and patterns for designing comprehensive test strategies and writing effective tests.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-dev:designing-testsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides patterns and techniques for creating effective test suites.
This skill provides patterns and techniques for creating effective test suites.
/\
/ \ E2E (10%)
/----\
/ \ Integration (20%)
/--------\
/ \ Unit (70%)
/------------\
def test_user_registration():
# Arrange - Set up test data and dependencies
user_data = {"email": "test@example.com", "password": "secure123"}
# Act - Execute the code under test
result = register_user(user_data)
# Assert - Verify the outcome
assert result.success is True
assert result.user.email == "test@example.com"
def test_discount_for_premium_users():
# Given a premium user with items in cart
user = create_premium_user()
cart = create_cart(user, items=[item(price=100)])
# When calculating the total
total = cart.calculate_total()
# Then a 20% discount is applied
assert total == 80
@pytest.fixture
def db_session():
"""Provide a clean database session for each test."""
session = create_session()
yield session
session.rollback()
session.close()
@pytest.fixture
def authenticated_user(db_session):
"""Provide an authenticated user."""
user = User.create(email="test@example.com")
db_session.add(user)
db_session.commit()
return user
@pytest.mark.parametrize("input,expected", [
("hello", "HELLO"),
("World", "WORLD"),
("", ""),
("123abc", "123ABC"),
])
def test_uppercase(input, expected):
assert uppercase(input) == expected
# Mock external API
@patch('services.payment.stripe_client')
def test_payment_processing(mock_stripe):
mock_stripe.charge.return_value = {"id": "ch_123", "status": "succeeded"}
result = process_payment(amount=100)
assert result.success is True
# Mock time
@freeze_time("2024-01-15")
def test_subscription_expiry():
sub = Subscription(expires_at=datetime(2024, 1, 14))
assert sub.is_expired() is True
tests/
├── unit/
│ ├── test_models.py
│ ├── test_services.py
│ └── test_utils.py
├── integration/
│ ├── test_api.py
│ └── test_database.py
├── e2e/
│ └── test_user_flows.py
├── fixtures/
│ └── conftest.py
└── factories/
└── user_factory.py
# Pattern: test_[action]_[condition]_[expected_result]
def test_login_with_valid_credentials_returns_token():
def test_login_with_invalid_password_returns_401():
def test_login_with_locked_account_raises_AccountLockedException():
| Component | Target |
|---|---|
| Business logic | 90%+ |
| Utilities | 85%+ |
| API endpoints | 80%+ |
| Configuration | 60%+ |
npx claudepluginhub drewdresser/ai-dev-settings --plugin ai-devUse when writing tests, designing test strategy, or reviewing test coverage. Covers test pyramid, naming, mocking, and flaky test policy.
Designs and implements testing strategies—unit, integration, E2E—for any codebase. Provides framework recommendations (Vitest, Playwright, pytest, etc.) and test structure templates.
Guides test pyramid structure, coverage targets, and patterns for unit, integration, and E2E tests. Includes AAA pattern, naming conventions, and API test checklist.