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 it mean for a test to be deterministic?
A deterministic test always produces the same result when run with the same code and inputs, no matter how many times it runs.
Click to reveal answer
beginner
Why are deterministic tests important in software testing?
They help ensure reliability and trust in test results because failures are consistent and reproducible, making debugging easier.
Click to reveal answer
intermediate
How can randomness affect test determinism?
Randomness can cause tests to behave differently each run, leading to flaky tests that sometimes pass and sometimes fail.
Click to reveal answer
intermediate
What is a common way to make tests deterministic when they use random values?
Set a fixed seed for the random number generator so it produces the same sequence of values every time the test runs.
Click to reveal answer
beginner
Example: In pytest, how do you fix randomness to make a test deterministic?
Use code like <code>import random
random.seed(42)</code> at the start of your test to fix the random seed.
Click to reveal answer
What is a key characteristic of a deterministic test?
AIt sometimes passes and sometimes fails unpredictably.
BIt uses random values to test different cases.
CIt always produces the same result given the same inputs.
DIt runs only once and never again.
✗ Incorrect
Deterministic tests always produce the same result with the same inputs, ensuring reliability.
Which practice helps make tests deterministic when randomness is involved?
AIgnoring random values in tests.
BUsing different random seeds each run.
CRunning tests multiple times to average results.
DSetting a fixed seed for the random number generator.
✗ Incorrect
Setting a fixed seed ensures the random values are the same every run, making tests deterministic.
What problem do non-deterministic (flaky) tests cause?
AThey make debugging harder because failures are inconsistent.
BThey always pass, hiding bugs.
CThey run faster than deterministic tests.
DThey require no maintenance.
✗ Incorrect
Flaky tests fail unpredictably, making it hard to know if a failure is real or random.
In pytest, where should you set the random seed to ensure determinism?
AOnly in the main application code.
BInside the test function before using random values.
CAfter the test finishes.
DYou cannot set a random seed in pytest.
✗ Incorrect
Setting the seed inside the test ensures the random values are predictable for that test run.
Which of these is NOT a cause of non-deterministic tests?
AUsing fixed inputs and no randomness.
BRelying on external systems with changing data.
CUsing random values without fixed seeds.
DTests depending on time or date.
✗ Incorrect
Using fixed inputs and no randomness helps keep tests deterministic.
Explain what deterministic tests are and why they matter in software testing.
Think about how tests behave when run multiple times with the same code.
You got /3 concepts.
Describe how you would make a pytest test deterministic if it uses random numbers.
Consider the random.seed() function and its placement.
You got /3 concepts.
Practice
(1/5)
1. What does it mean for a test to be deterministic in pytest?
easy
A. The test depends on external services to pass.
B. The test always produces the same result given the same inputs.
C. The test uses random data every time it runs.
D. The test runs faster than non-deterministic tests.
Solution
Step 1: Understand the meaning of deterministic tests
Deterministic tests produce consistent results every time they run with the same inputs.
Step 2: Compare options with this definition
Only The test always produces the same result given the same inputs. states that the test always produces the same result given the same inputs, matching the definition.
Final Answer:
The test always produces the same result given the same inputs. -> Option B
Quick Check:
Deterministic = Same result every time [OK]
Hint: Deterministic means repeatable results every run [OK]
Common Mistakes:
Confusing deterministic with fast tests
Thinking randomness is allowed in deterministic tests
Assuming external dependencies make tests deterministic
2. Which of the following is the correct way to fix randomness in a pytest test to make it deterministic?
easy
A. Use a fixed seed for the random number generator.
B. Remove all assertions from the test.
C. Run the test multiple times and average the results.
D. Use random data without controlling it.
Solution
Step 1: Identify how to control randomness
Setting a fixed seed for the random number generator ensures the same random values each run.
Step 2: Evaluate options for fixing randomness
Only Use a fixed seed for the random number generator. uses a fixed seed, which makes the test deterministic. Other options do not control randomness properly.
Final Answer:
Use a fixed seed for the random number generator. -> Option A
Quick Check:
Fixed seed = deterministic randomness [OK]
Hint: Fix random seed to control randomness [OK]
Common Mistakes:
Removing assertions does not fix randomness
Averaging results does not make test deterministic
Using uncontrolled random data causes flaky tests
3. Given this pytest test code, what will be the output when run twice?
import random
def test_random_number():
random.seed(42)
num = random.randint(1, 10)
assert num == 2
medium
A. The test will pass both times because the seed fixes the random number.
B. The test will fail both times because 2 is not the generated number.
C. The test will pass the first time and fail the second time.
D. The test will fail the first time and pass the second time.
Solution
Step 1: Understand the effect of setting random.seed(42)
Setting the seed to 42 makes random.randint(1, 10) produce the same number every run.
Step 2: Check the generated number and assertion
With seed 42, random.randint(1, 10) returns 2, so the assertion num == 2 passes every time.
Final Answer:
The test will pass both times because the seed fixes the random number. -> Option A
Quick Check:
Seed 42 -> randint = 2 == 2 -> assert passes [OK]
Hint: Seed fixes random output to 2, so assertion num==2 passes consistently [OK]
Common Mistakes:
Thinking the test passes because of seed (but checks wrong number)
Assuming random changes every run despite seed
Not verifying that seed(42) produces 2 for randint(1,10)
4. This pytest test sometimes fails randomly. What is the main issue?
import random
def test_random_fail():
num = random.randint(1, 10)
assert num == 5
medium
A. The test function name is invalid.
B. The assertion syntax is incorrect.
C. The test does not fix the random seed, causing non-deterministic results.
D. The random module is not imported.
Solution
Step 1: Identify randomness control in the test
The test uses random.randint without setting a seed, so output varies each run.
Step 2: Understand why this causes test failure
Because the number is random, the assertion num == 5 sometimes fails, making the test flaky.
Final Answer:
The test does not fix the random seed, causing non-deterministic results. -> Option C
Quick Check:
No seed -> random output varies -> flaky test [OK]
Hint: No seed means random output, causing flaky tests [OK]
Common Mistakes:
Thinking assertion syntax is wrong
Assuming test name affects determinism
Ignoring that random module is correctly imported
5. You want to write a deterministic pytest test that checks if a function returns the current date. Which approach ensures determinism?
hard
A. Call the function without any changes and assert the result.
B. Run the test only once to avoid variability.
C. Use the actual current date and accept test failures on different days.
D. Mock the current date to a fixed value during the test.
Solution
Step 1: Understand why current date causes non-determinism
The current date changes every day, so tests using it without control will fail on different days.
Step 2: Identify how to fix the date for deterministic testing
Mocking the current date to a fixed value ensures the test always sees the same date and passes consistently.
Final Answer:
Mock the current date to a fixed value during the test. -> Option D
Quick Check:
Mock date -> fixed input -> deterministic test [OK]
Hint: Mock changing data like dates for stable tests [OK]
Common Mistakes:
Using real current date causes flaky tests
Ignoring mocking leads to non-deterministic results