Development (TDD)
Core Rules (Non-Negotiable)
- •NEVER write production code without a failing test first
- •One behaviour per test
- •Write minimum code to make the test pass
- •Run tests and verify green state before proceeding
The TDD Cycle
code
🔴 RED → Write ONE failing test 🟢 GREEN → Write MINIMUM code to pass ✅ VERIFY → Run all tests, confirm green
Detailed Steps
🔴 RED — Write a Failing Test
- •Identify the next behaviour to implement
- •Write a test that specifies that behaviour
- •Run the test — it MUST fail
- •If it passes, you've either:
- •Written the wrong test, or
- •The behaviour already exists
🟢 GREEN — Make It Pass
- •Write the simplest code that makes the test pass
- •Do not write more than necessary
- •Do not refactor yet
- •Run the test — it MUST pass
✅ VERIFY — Confirm Green State
- •Run ALL tests, not just the new one
- •All tests must pass
- •If any fail, fix before continuing
What Counts as "Minimum Code"
- •Hard-coded values are acceptable initially
- •Duplication is acceptable initially
- •"Ugly" code is acceptable initially
- •Refactoring comes AFTER green using the refactoring skill
Test Naming
Use descriptive names that document behaviour:
scala
// Good "return empty list when library has no books" "return error when member not found" // Bad "test1" "testGetBooks"
Announcing Progress
code
🔴 RED → [behaviour being tested] 🟢 GREEN → Test passes ✅ VERIFY → All tests green
Common Mistakes
- •Writing production code before the test
- •Writing multiple tests before making any pass
- •Refactoring while still red
- •Skipping the verify step
- •Writing tests that test implementation, not behaviour