testing-basics
Provides fundamental testing patterns and best practices applicable across programming languages. Covers test structure (AAA), types, naming conventions, isolation principles, and mocking guidelines. Includes concrete examples in Python and a practical checklist for developers.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install timequity-plugins-testing-basics
Repository
Skill path: craft-coder/testing-basics
Provides fundamental testing patterns and best practices applicable across programming languages. Covers test structure (AAA), types, naming conventions, isolation principles, and mocking guidelines. Includes concrete examples in Python and a practical checklist for developers.
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Testing.
Target audience: Junior to mid-level developers learning testing fundamentals or teams establishing testing standards.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: timequity.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install testing-basics into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/timequity/plugins before adding testing-basics to shared team environments
- Use testing-basics for testing workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: testing-basics
description: |
Essential testing patterns for any project.
Use when: writing tests, setting up testing, or fixing test issues.
Triggers: "test", "testing", "unit test", "write tests".
---
# Testing Basics
Core testing patterns that apply to any language or framework.
## Test Structure
### AAA Pattern
```
Arrange → Act → Assert
```
```python
# Arrange
user = User(name="Alice")
# Act
result = user.greet()
# Assert
assert result == "Hello, Alice!"
```
## Test Types
| Type | Scope | Speed | When to use |
|------|-------|-------|-------------|
| Unit | Single function/class | Fast | Core logic |
| Integration | Multiple components | Medium | APIs, DB |
| E2E | Full system | Slow | Critical paths |
## Naming Tests
```
test_[what]_[condition]_[expected]
```
Examples:
- `test_login_valid_credentials_returns_token`
- `test_checkout_empty_cart_raises_error`
- `test_search_no_results_returns_empty_list`
## What to Test
### Do Test
- Business logic
- Edge cases
- Error handling
- Public interfaces
### Don't Test
- Framework code
- Simple getters/setters
- Implementation details
- External services directly
## Test Isolation
Each test should:
- Run independently
- Not depend on order
- Clean up after itself
- Not share state
## Mocking
Mock external dependencies, not internal logic:
```python
# Good: mock external service
@patch('app.services.email.send')
def test_signup_sends_welcome_email(mock_send):
signup(user)
mock_send.assert_called_once()
# Bad: mock internal implementation
@patch('app.models.user.User._validate') # Don't do this
```
## Coverage
- Aim for meaningful coverage, not 100%
- Cover happy paths first
- Then error cases
- Then edge cases
## Quick Checklist
Before committing:
- [ ] Tests pass locally
- [ ] New code has tests
- [ ] No flaky tests added
- [ ] Test names are descriptive