Test-Driven Development
Implement $ARGUMENTS using Test-Driven Development (TDD).
TDD Cycle
Repeat: Red → Green → Refactor
- Red: Write a failing test
- Green: Write minimal code to pass the test
- Refactor: Clean up code (tests still pass)
Implementation Steps
Phase 1: Test Design
Confirm Requirements
-
What is the input
-
What is the output
-
What are the edge cases
List Test Cases
- Happy path: Basic functionality
- Happy path: Boundary values
- Error case: Invalid input
- Error case: Error handling
Phase 2: Red-Green-Refactor
Step 1: Write First Test (Red)
tests/test_{module}.py
def test_{function}_basic(): """Test the most basic case""" result = function(input) assert result == expected
Run test and confirm failure:
uv run pytest tests/test_{module}.py -v
Step 2: Implementation (Green)
Write minimal code to pass the test:
-
Don't aim for perfection
-
Hardcoding is OK
-
Just make the test pass
Run test and confirm success:
uv run pytest tests/test_{module}.py -v
Step 3: Refactoring (Refactor)
Improve while tests still pass:
-
Remove duplication
-
Improve naming
-
Clean up structure
uv run pytest tests/test_{module}.py -v # Confirm still passes
Step 4: Next Test
Return to Step 1 with next test case from the list.
Phase 3: Completion Check
Run all tests
uv run pytest -v
Check coverage (target 80%+)
uv run pytest --cov={module} --cov-report=term-missing
Report Format
TDD Complete: {Feature Name}
Test Cases
- {test1}: {description}
- {test2}: {description} ...
Coverage
{Coverage report}
Implementation Files
src/{module}.py: {description}tests/test_{module}.py: {N} tests
Notes
-
Write tests first (not after)
-
Keep each cycle small
-
Refactor after tests pass
-
Prioritize working code over perfection