Branch coverage helps us check if every decision point in our code has been tested. It makes sure all possible paths are tried.
Branch coverage in PyTest
pytest --cov=your_module --cov-branch
This command runs tests and measures branch coverage.
Use --cov-branch to include branch coverage, not just line coverage.
myapp and check branch coverage.pytest --cov=myapp --cov-branch
calculator with branch coverage and verbose output.pytest --cov=calculator --cov-branch -v
This simple function returns the bigger of two numbers. The test checks both branches: when a is greater and when b is greater.
def max_value(a, b): if a > b: return a else: return b def test_max_value(): assert max_value(5, 3) == 5 assert max_value(2, 4) == 4 # Run with: pytest --cov=sample_module --cov-branch
Branch coverage is stricter than line coverage because it checks all decision outcomes.
Use branch coverage to find missing tests in if-else and switch cases.
High branch coverage means your tests explore all logical paths.
Branch coverage tests all possible paths in decision points.
Use pytest --cov --cov-branch to measure it.
It helps find untested branches and improve test quality.
Practice
What does branch coverage measure in pytest testing?
Solution
Step 1: Understand branch coverage concept
Branch coverage ensures every possible path in decision points (like if-else) is tested.Step 2: Compare with other coverage types
Line coverage counts executed lines, but branch coverage focuses on decision paths.Final Answer:
It checks if all decision paths in the code are tested. -> Option AQuick Check:
Branch coverage = all decision paths tested [OK]
- Confusing branch coverage with line coverage
- Thinking it counts test cases
- Assuming it checks syntax errors
Which pytest command option enables branch coverage measurement?
Solution
Step 1: Recall pytest coverage options
The option--covenables coverage measurement, and--cov-branchadds branch coverage.Step 2: Identify correct combined command
Both options must be used together aspytest --cov --cov-branchto measure branch coverage.Final Answer:
pytest --cov --cov-branch -> Option AQuick Check:
Use --cov with --cov-branch for branch coverage [OK]
- Using only --cov-branch without --cov
- Typing incorrect option names
- Assuming branch coverage is default
Given this code snippet tested with pytest and branch coverage enabled, what is the branch coverage result?
def check_num(x):
if x > 0:
return "Positive"
else:
return "Non-positive"
# Test cases:
assert check_num(5) == "Positive"
Solution
Step 1: Identify branches in the code
The function has two branches: one for x > 0 and one for else (x ≤ 0).Step 2: Check which branches are tested
The test calls check_num(5), which covers only the x > 0 branch, missing the else branch.Final Answer:
50% branch coverage -> Option DQuick Check:
One branch tested out of two = 50% [OK]
- Assuming one test covers all branches
- Confusing line coverage with branch coverage
- Ignoring else branch testing
Identify the error in this pytest test that aims for full branch coverage:
def classify(n):
if n > 10:
return "High"
elif n > 5:
return "Medium"
else:
return "Low"
def test_classify():
assert classify(12) == "High"
assert classify(7) == "Medium"
Solution
Step 1: Analyze branches in classify()
There are three branches: n > 10, n > 5, and else (n ≤ 5).Step 2: Check test coverage of branches
Tests cover n=12 (High) and n=7 (Medium), but no test covers n ≤ 5 (Low) branch.Final Answer:
Missing test for the else branch (n ≤ 5). -> Option CQuick Check:
All branches need tests for full coverage [OK]
- Assuming two tests cover all branches
- Looking for syntax errors where none exist
- Ignoring else branch testing
You have this function. Which set of test inputs achieves 100% branch coverage?
def analyze_score(score):
if score >= 90:
return "A"
elif score >= 75:
return "B"
else:
return "C"
Solution
Step 1: Identify all branches
Branches: score ≥ 90 ("A"), score ≥ 75 ("B"), else "C".Step 2: Check which inputs cover all branches
Input 95 covers "A" branch; 80 covers score ≥ 75 ("B"); 70 covers else "C" branch. This covers all branches.Final Answer:
[95, 80, 70] -> Option BQuick Check:
Test inputs cover all if-elif-else paths [OK]
- Missing coverage for one of the branches
- Choosing inputs that skip else branch
- Assuming close values cover all branches
Ready to prove it?
Pass the test and this pattern moves unknown
