Line and branch coverage help us check how much of our code is tested. This shows if tests run all parts of the program.
Line and branch coverage in JUnit
No direct code syntax. Use tools like JaCoCo with JUnit to measure coverage.a > b true, one for false.// Example Java method public int max(int a, int b) { if (a > b) { return a; } else { return b; } }
// Test case covering only one branch
@Test
public void testMax() {
assertEquals(5, max(5, 3));
}// Test case covering both branches
@Test
public void testMaxBoth() {
assertEquals(5, max(5, 3));
assertEquals(7, max(4, 7));
}This JUnit test class has two tests. The first test covers only the true branch of the max method. The second test covers both true and false branches.
Using a coverage tool like JaCoCo will show line coverage and branch coverage results for these tests.
import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; public class CoverageExample { public int max(int a, int b) { if (a > b) { return a; } else { return b; } } @Test public void testMaxTrueBranch() { assertEquals(5, max(5, 3)); } @Test public void testMaxBothBranches() { assertEquals(5, max(5, 3)); assertEquals(7, max(4, 7)); } }
Line coverage alone may miss untested decision paths; branch coverage is more thorough.
Coverage tools integrate with build tools like Maven or Gradle for easy reports.
High coverage does not guarantee no bugs but helps find untested code.
Line coverage checks if each line runs during tests.
Branch coverage checks if all decision paths run.
Use coverage tools with JUnit to measure and improve test quality.
Practice
line coverage measure in JUnit testing?Solution
Step 1: Understand line coverage concept
Line coverage measures if every line of code is executed at least once during testing.Step 2: Compare with other options
Options A, B, and D describe different testing aspects, not line coverage.Final Answer:
Whether each line of code is executed during tests -> Option DQuick Check:
Line coverage = executed lines [OK]
- Confusing line coverage with branch coverage
- Thinking line coverage checks input values
- Assuming line coverage means no errors
Solution
Step 1: Recall JUnit test annotation
The standard annotation to mark a test method in JUnit is@Test.Step 2: Verify other options
Annotations like@Coverage,@RunCoverage, and@Measuredo not exist in JUnit.Final Answer:
@Test -> Option AQuick Check:
JUnit test method = @Test [OK]
- Assuming coverage requires special annotation
- Using non-existent annotations
- Confusing coverage tools with JUnit annotations
public int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}If your tests only call
max(5, 3), what coverage is achieved?Solution
Step 1: Analyze lines executed by max(5, 3)
Calling max(5, 3) executes the if condition andreturn a;, as well as the else block's closing brace, so all lines are executed, resulting in 100% line coverage.Step 2: Analyze branches covered
Only the 'if' branch (a > b true) is taken; the 'else' branch is not tested, so 50% branch coverage.Final Answer:
100% line coverage, 50% branch coverage -> Option BQuick Check:
One path = full line coverage, partial branch coverage [OK]
- Thinking one test achieves 100% line coverage
- Confusing line coverage with branch coverage
- Ignoring else branch execution
public boolean isPositive(int n) {
if (n > 0) {
return true;
}
return false;
}But coverage report shows branch coverage less than 100%. What is the likely cause?
Solution
Step 1: Identify branches in method
The method has two branches: if (n > 0) true, else false.Step 2: Understand branch coverage less than 100%
If tests never call with n ≤ 0, the else branch is not executed, lowering branch coverage.Final Answer:
Tests never call with n ≤ 0, missing else branch coverage -> Option AQuick Check:
Branch coverage needs both if and else tested [OK]
- Assuming syntax errors cause coverage issues
- Believing JUnit lacks branch coverage support
- Ignoring else branch execution
public int classify(int x) {
if (x > 0) {
if (x % 2 == 0) {
return 1;
} else {
return 2;
}
} else {
return 3;
}
}What is the minimum number of JUnit test cases needed to achieve 100% line and branch coverage?
Solution
Step 1: Identify branches
There are three branches: outer if (x > 0) true and false, and inner if (x % 2 == 0) true and false.Step 2: Determine test cases to cover all branches
Tests needed: one with x > 0 and even (return 1), one with x > 0 and odd (return 2), and one with x ≤ 0 (return 3).Final Answer:
3 -> Option CQuick Check:
Three tests cover all branches and lines [OK]
- Thinking two tests cover all branches
- Ignoring nested if branches
- Overestimating tests needed
Ready to prove it?
Pass the test and this pattern moves unknown
