Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does the 'Given' step represent in the Given-When-Then pattern?
The 'Given' step sets up the initial context or preconditions for the test. It describes the starting state before the action happens.
Click to reveal answer
beginner
Explain the 'When' step in the Given-When-Then pattern.
The 'When' step describes the action or event that triggers the behavior you want to test.
Click to reveal answer
beginner
What is the purpose of the 'Then' step in the Given-When-Then pattern?
The 'Then' step checks the expected outcome or result after the action in the 'When' step. It contains assertions to verify the behavior.
Click to reveal answer
intermediate
How can you structure a pytest test function using Given-When-Then?
You can write comments or separate code blocks for Given (setup), When (action), and Then (assertions) inside a pytest test function to clearly show each step.
Click to reveal answer
beginner
Why is the Given-When-Then pattern helpful in writing tests?
It makes tests easier to read and understand by clearly separating setup, action, and verification. This helps communicate test intent like a story.
Click to reveal answer
In the Given-When-Then pattern, what does 'When' represent?
AThe cleanup after the test
BThe initial setup or context
CThe expected result or assertion
DThe action or event being tested
✗ Incorrect
The 'When' step describes the action or event that triggers the behavior you want to test.
Which step in Given-When-Then contains assertions?
AGiven
BWhen
CThen
DSetup
✗ Incorrect
The 'Then' step contains assertions to verify the expected outcome after the action.
How should you organize a pytest test using Given-When-Then?
AUse comments or separate blocks for Given, When, Then
BPut all code in one block without comments
COnly write assertions without setup
DWrite multiple test functions for each step
✗ Incorrect
Using comments or separate code blocks for Given, When, Then improves readability and clarity.
What is the main benefit of using Given-When-Then in tests?
AImproves test readability and understanding
BHelps tests look more complex
CRemoves the need for assertions
DMakes tests run faster
✗ Incorrect
Given-When-Then helps clearly separate test steps, making tests easier to read and understand.
In pytest, which keyword is used to write a test function following Given-When-Then?
Aclass
Bdef
Cimport
Dassert
✗ Incorrect
In pytest, test functions are defined using the 'def' keyword.
Describe the Given-When-Then pattern and how you would apply it in a pytest test function.
Think of it as telling a simple story in your test.
You got /4 concepts.
Why is it important to separate test steps into Given, When, and Then?
Imagine explaining your test to a friend.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the Given-When-Then pattern in pytest tests?
easy
A. To write tests only for user interface elements
B. To organize tests into setup, action, and verification steps
C. To speed up test execution by skipping setup
D. To avoid using assertions in tests
Solution
Step 1: Understand the pattern roles
Given-When-Then divides a test into three parts: Given (setup), When (action), Then (check).
Step 2: Match purpose with options
Only To organize tests into setup, action, and verification steps correctly describes this organization purpose.
Final Answer:
To organize tests into setup, action, and verification steps -> Option B
2. Which of the following is the correct way to write a Given-When-Then style pytest test function?
easy
A. def test_example():
# Given
x = 5
# When
y = x + 3
# Then
assert y == 8
B. def test_example():
x = 5
y = x + 3
assert y == 8
# Given-When-Then comments missing
C. def test_example():
assert 5 + 3 == 8
# Given-When-Then not used
D. def test_example():
# When
x = 5
# Given
y = x + 3
# Then
assert y == 8
Solution
Step 1: Check comment order and code logic
def test_example():
# Given
x = 5
# When
y = x + 3
# Then
assert y == 8 correctly uses Given-When-Then comments in order with proper setup, action, and assertion.
Step 2: Identify incorrect patterns
The other options either lack Given-When-Then comments or have them in the wrong order (e.g., When before Given).
Final Answer:
def test_example():\n # Given\n x = 5\n # When\n y = x + 3\n # Then\n assert y == 8 -> Option A
Quick Check:
Correct comment order = def test_example():
# Given
x = 5
# When
y = x + 3
# Then
assert y == 8 [OK]
Hint: Follow comment order: Given, When, Then [OK]
Common Mistakes:
Mixing the order of Given and When comments
Skipping comments entirely
Placing assertions outside Then step
3. Given the following pytest test using Given-When-Then pattern, what will be the test result?
def test_sum():
# Given
numbers = [1, 2, 3]
# When
total = sum(numbers)
# Then
assert total == 6
medium
A. Test will fail because assertion is wrong
B. Test will fail because sum is calculated incorrectly
C. Test will error due to missing import
D. Test will pass because sum of [1, 2, 3] is 6
Solution
Step 1: Calculate sum of list
The sum of [1, 2, 3] is 1+2+3 = 6.
Step 2: Check assertion correctness
The assertion checks total == 6, which is true, so test passes.
Final Answer:
Test will pass because sum of [1, 2, 3] is 6 -> Option D
Quick Check:
sum([1,2,3]) = 6 [OK]
Hint: Calculate sum and compare with assertion value [OK]
Common Mistakes:
Assuming sum returns a list instead of number
Thinking assertion expects a different value
Confusing test error with failure
4. Identify the error in this Given-When-Then pytest test:
def test_multiply():
# Given
x = 4
y = 5
# When
result = x * y
# Then
assert result = 20
medium
A. Syntax error in assertion statement
B. Wrong variable names used
C. Missing setup in Given step
D. No assertion in Then step
Solution
Step 1: Check assertion syntax
The assertion uses single '=' which is assignment, not comparison. It should be '==' for comparison.
Step 2: Confirm other parts are correct
Variables and steps are correct; only assertion syntax is wrong.
Final Answer:
Syntax error in assertion statement -> Option A
Quick Check:
Use '==' in assert, not '=' [OK]
Hint: Use '==' for assert comparisons, not '=' [OK]
Common Mistakes:
Using '=' instead of '==' in assert
Confusing assignment with comparison
Ignoring syntax errors in assertions
5. You want to test a function that filters out falsy values (like 0, '', None) from a list using Given-When-Then pattern in pytest. Which test code correctly applies this pattern and checks the result?
hard
A. def test_filter_falsy():
# Given
data = [0, 1, '', 'hello', None, True]
# Then
assert filtered == [1, 'hello', True]
# When
filtered = [x for x in data if x]
B. def test_filter_falsy():
data = [0, 1, '', 'hello', None, True]
filtered = [x for x in data if x]
assert filtered == [1, 'hello', True]
C. def test_filter_falsy():
# Given
data = [0, 1, '', 'hello', None, True]
# When
filtered = [x for x in data if x]
# Then
assert filtered == [1, 'hello', True]
D. def test_filter_falsy():
# Given
data = [0, 1, '', 'hello', None, True]
# When
filtered = filter(lambda x: x, data)
# Then
assert list(filtered) == [0, 1, '', 'hello', None, True]
Solution
Step 1: Verify Given-When-Then structure
def test_filter_falsy():
# Given
data = [0, 1, '', 'hello', None, True]
# When
filtered = [x for x in data if x]
# Then
assert filtered == [1, 'hello', True] correctly uses Given for data setup, When for filtering action, Then for assertion check.
Step 2: Check correctness of filtering and assertion
Filtering removes falsy values; expected list matches filtered result. Other options miss comments or have wrong assertion.
Final Answer:
def test_filter_falsy():\n # Given\n data = [0, 1, '', 'hello', None, True]\n # When\n filtered = [x for x in data if x]\n # Then\n assert filtered == [1, 'hello', True] -> Option C
Quick Check:
Given-When-Then + correct filter = def test_filter_falsy():
# Given
data = [0, 1, '', 'hello', None, True]
# When
filtered = [x for x in data if x]
# Then
assert filtered == [1, 'hello', True] [OK]
Hint: Keep steps clear: setup, action, then check [OK]