The Arrange-Act-Assert pattern helps organize tests clearly. It makes tests easy to read and understand by splitting them into three simple steps.
Arrange-Act-Assert pattern in PyTest
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
PyTest
def test_example(): # Arrange setup_data = ... # Act result = function_to_test(setup_data) # Assert assert result == expected_value
Arrange: Prepare everything needed for the test.
Act: Run the code or function you want to test.
Examples
PyTest
def test_sum(): # Arrange numbers = [1, 2, 3] # Act total = sum(numbers) # Assert assert total == 6
PyTest
def test_uppercase(): # Arrange text = 'hello' # Act result = text.upper() # Assert assert result == 'HELLO'
Sample Program
This test checks if the multiply function returns the correct product of two numbers.
PyTest
def multiply(a, b): return a * b def test_multiply(): # Arrange x = 4 y = 5 # Act product = multiply(x, y) # Assert assert product == 20
Important Notes
Keep each section focused: Arrange only sets up, Act only runs code, Assert only checks results.
Use comments or blank lines to separate the three parts for clarity.
This pattern works well with pytest but can be used in any testing framework.
Summary
The Arrange-Act-Assert pattern organizes tests into three clear steps.
It makes tests easier to read, write, and maintain.
Use it to improve your testing habits and teamwork.
Practice
1. What is the main purpose of the Arrange-Act-Assert pattern in pytest?
easy
Solution
Step 1: Understand the pattern's goal
The Arrange-Act-Assert pattern structures tests into three parts: setup, action, and verification.Step 2: Identify the main benefit
This structure makes tests easier to read and maintain by clearly separating steps.Final Answer:
To organize tests into clear steps for better readability -> Option BQuick Check:
Arrange-Act-Assert = Organize tests clearly [OK]
Hint: Remember: Arrange sets up, Act performs, Assert checks [OK]
Common Mistakes:
- Thinking it speeds up test execution
- Confusing it with test data generation
- Believing it removes the need for assertions
2. Which of the following is the correct order of steps in the Arrange-Act-Assert pattern?
easy
Solution
Step 1: Recall the pattern sequence
The pattern always starts with Arrange (setup), then Act (perform action), and finally Assert (check results).Step 2: Match the correct order
Only Arrange, Act, Assert follows this exact sequence.Final Answer:
Arrange, Act, Assert -> Option CQuick Check:
Order is Arrange -> Act -> Assert [OK]
Hint: Think: Prepare, Do, Check in that order [OK]
Common Mistakes:
- Mixing up the order of steps
- Starting with Assert before Act
- Confusing Act and Arrange steps
3. Given the following pytest test code, what will be the test result?
def test_sum():
# Arrange
numbers = [1, 2, 3]
expected = 6
# Act
result = sum(numbers)
# Assert
assert result == expected
medium
Solution
Step 1: Analyze the Arrange step
List numbers is [1, 2, 3] and expected sum is 6, which is correct.Step 2: Check the Act and Assert steps
sum(numbers) calculates 6, matching expected. The assertion will pass.Final Answer:
Test will pass because sum(numbers) equals expected -> Option AQuick Check:
sum([1,2,3]) = 6, assertion true [OK]
Hint: Check if actual equals expected in Assert step [OK]
Common Mistakes:
- Assuming sum is undefined
- Thinking expected value is wrong
- Looking for syntax errors where none exist
4. Identify the error in this pytest test using Arrange-Act-Assert pattern:
def test_uppercase():
# Arrange
text = "hello"
# Act
result = text.upper
# Assert
assert result == "HELLO"
medium
Solution
Step 1: Review the Act step
text.upper is a method reference, missing parentheses to call it.Step 2: Understand the impact on Assert
Without calling upper(), result is a method, not a string, so assertion fails.Final Answer:
Missing parentheses in Act step calling upper() -> Option AQuick Check:
Call methods with () to get results [OK]
Hint: Remember to call methods with parentheses () [OK]
Common Mistakes:
- Thinking expected value is wrong
- Assuming variable is undefined
- Believing assert syntax is incorrect
5. You want to test a function
divide(a, b) that returns the division of two numbers. Using Arrange-Act-Assert, which test correctly checks that dividing by zero raises a ZeroDivisionError?hard
Solution
Step 1: Understand the test goal
The test must verify that dividing by zero raises a ZeroDivisionError exception.Step 2: Identify correct pytest usage
Usingwith pytest.raises(ZeroDivisionError):correctly checks for the exception during Act step.Final Answer:
Using pytest.raises to check for ZeroDivisionError -> Option DQuick Check:
Use pytest.raises to test exceptions [OK]
Hint: Use pytest.raises to assert exceptions in tests [OK]
Common Mistakes:
- Ignoring exception and asserting wrong result
- Not using pytest.raises for exception testing
- Asserting True without checking error
