Test-Driven Development Basics
Learn red-green-refactor and tests as executable expectations with clear explanations, runnable examples, and practice.
- Explain the purpose of red-green-refactor and tests as executable expectations.
- Read and trace a short Python example in execution order.
- Predict and verify the exact output of the lesson's examples.
- Apply the concept to a small practice task and explain the solution.
1. Core idea
This lesson focuses on red-green-refactor and tests as executable expectations. Start by understanding the purpose of the concept before memorizing syntax.
In Python, red-green-refactor and tests as executable expectations should be learned by reading small examples, predicting the result, and then checking that result. The goal is to understand why the program behaves as it does.
Worked example
def is_even(number):
return number % 2 == 0
assert is_even(4)
assert not is_even(5)
print('Tests passed')This example demonstrates red-green-refactor and tests as executable expectations. Read the code from top to bottom and identify the value produced by each expression. Compare the displayed output with the exact output shown here; spaces and line breaks are significant.
2. Step-by-step reasoning
Read each statement in execution order. Python evaluates expressions and then performs the operation described by the statement.
When the example changes a value, track the relevant name or collection after each statement. When it branches or loops, check the condition at the exact point where Python evaluates it.
Check a boundary case
def clamp_zero(n):
return max(0, n)
assert clamp_zero(-2) == 0
assert clamp_zero(3) == 3
print('Boundary checks passed')The negative input is clamped to zero. The positive input remains unchanged.
Key Point
Step-by-Step Execution Dry Run
Trace how Python executes each statement and modifies memory state.
| Step | Code Line | Variable State / Output | What Python Does |
|---|---|---|---|
| #1 | def is_even(number): | Initial expression or statement | Python begins by evaluating the first statement. |
| #2 | print('Tests passed') | Final operation | The final statement produces or displays the result shown in the output. |
3. Practical use and edge cases
Use red-green-refactor and tests as executable expectations when it makes the program's intent clearer and its behavior easier to test.
Test ordinary values as well as boundary cases. For example, consider empty input, zero, negative values, missing keys, or an empty collection when those cases apply to the operation.
Prefer small, descriptive names and focused functions. Clear code is easier to debug than a compact expression whose behavior is difficult to explain.
Common Mistake to Avoid
Common Pitfalls & Mistakes to Avoid
#1 Memorizing syntax without understanding the behavior.
Explanation: Trace each statement and explain what value or state changes after it runs.
#2 Assuming the displayed output without checking spaces, types, or line breaks.
Explanation: Run the example and compare the actual output character by character.
#3 Ignoring edge cases or invalid values.
Explanation: Test representative normal, boundary, and invalid cases when they apply.
Practice Questions
Implement is_positive(n) and assert it returns True for 3 and False for 0.
Re-create the behavior demonstrated in the second example: Check a boundary case. Use the code and expected output as your acceptance criteria.
Test-Driven Development Basics Knowledge Check
1. What is the usual TDD cycle?
2. What is the exact output of the worked example in this lesson?
3. Which approach best demonstrates understanding of test-driven development basics?
Technical & Placement Interview Questions
Key Takeaways & Summary
- Test-Driven Development Basics is best understood by connecting its syntax to the behavior Python performs.
- Trace expressions in order and verify the output instead of relying on a guess.
- Choose clear code and test relevant edge cases.
Finished reading this lesson?
Track your course progress and update your learning dashboard.
Related Topics & Next Steps
Strengthen your programming fundamentals with these related lessons: