Bird
Raised Fist0
JUnittesting~20 mins

Why coverage measures test completeness in JUnit - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Coverage Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
What does code coverage measure in testing?

In software testing, code coverage is used to measure how much of the code is tested. What exactly does code coverage measure?

AThe number of bugs found during testing
BThe number of tests written for the software
CThe time taken to run all tests
DThe percentage of code lines executed by tests
Attempts:
2 left
💡 Hint

Think about what 'coverage' means in everyday life, like covering a surface.

❓ Predict Output
intermediate
2:00remaining
JUnit test coverage output interpretation

Given this JUnit test and code, what coverage percentage will be reported?

JUnit
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    public int subtract(int a, int b) {
        return a - b;
    }
}

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

public class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }
}
A50%
B100%
C0%
D75%
Attempts:
2 left
💡 Hint

Only one method is tested out of two.

❓ assertion
advanced
1:30remaining
Which assertion best checks test completeness using coverage?

You want to assert that your JUnit tests cover all branches of a method. Which assertion best reflects this completeness?

AassertFalse(coveragePercentage > 0)
BassertTrue(coveragePercentage == 100, "All branches covered")
CassertNotNull(coveragePercentage)
DassertEquals(coveragePercentage, 50)
Attempts:
2 left
💡 Hint

Complete coverage means 100% coverage.

🔧 Debug
advanced
2:00remaining
Why does coverage report less than 100% despite all tests passing?

You have written JUnit tests that pass, but coverage reports only 80%. What is the most likely reason?

AJUnit tests have syntax errors
BCoverage tool is not installed
CSome code branches or lines are not executed by any test
DTests are running too fast
Attempts:
2 left
💡 Hint

Passing tests do not guarantee all code paths run.

❓ framework
expert
2:30remaining
How to configure JUnit to measure branch coverage accurately?

Which configuration or tool setup ensures JUnit tests measure branch coverage accurately?

AUse JaCoCo agent with JVM argument and enable branch coverage in report settings
BUse System.out.println statements to track coverage manually
CRun JUnit tests without any coverage tool attached
DDisable assertions in JUnit tests
Attempts:
2 left
💡 Hint

Coverage tools need to instrument code to measure branches.

Practice

(1/5)
1. What does code coverage measure in JUnit testing?
easy
A. The memory used during testing
B. How much of the code is executed by tests
C. The number of test cases written
D. The speed of test execution

Solution

  1. Step 1: Understand the meaning of coverage

    Coverage shows which parts of the code are run when tests execute.
  2. Step 2: Relate coverage to test completeness

    Higher coverage means more code is tested, indicating more complete tests.
  3. Final Answer:

    How much of the code is executed by tests -> Option B
  4. Quick Check:

    Coverage = executed code portion [OK]
Hint: Coverage = code run by tests, not test count [OK]
Common Mistakes:
  • Confusing coverage with test speed
  • Thinking coverage counts test cases
  • Assuming coverage measures memory use
2. Which JUnit annotation is used to mark a method as a test to be included in coverage?
easy
A. @Test
B. @AfterEach
C. @BeforeAll
D. @Ignore

Solution

  1. Step 1: Identify JUnit test method annotation

    The @Test annotation marks methods as test cases to run.
  2. Step 2: Understand coverage relation

    Only methods run as tests contribute to coverage measurement.
  3. Final Answer:

    @Test -> Option A
  4. Quick Check:

    @Test marks test methods [OK]
Hint: Look for @Test to include method in coverage [OK]
Common Mistakes:
  • Using @BeforeAll as test method
  • Confusing @Ignore with test execution
  • Thinking @AfterEach runs tests
3. Given this JUnit test code snippet, what is the coverage result for method calculate?
public class Calculator {
  public int calculate(int x) {
    if (x > 0) return x * 2;
    else return 0;
  }
}

@Test
public void testCalculatePositive() {
  Calculator c = new Calculator();
  assertEquals(4, c.calculate(2));
}
medium
A. 50% coverage of calculate method
B. 100% coverage of calculate method
C. 0% coverage of calculate method
D. 75% coverage of calculate method

Solution

  1. Step 1: Analyze test input and branches

    The test calls calculate(2), which triggers the if branch (x > 0).
  2. Step 2: Check coverage of else branch

    The else branch (return 0) is never executed, so not covered.
  3. Final Answer:

    50% coverage of calculate method -> Option A
  4. Quick Check:

    One branch covered, one not = 50% [OK]
Hint: Test all branches for full coverage [OK]
Common Mistakes:
  • Assuming one test covers all branches
  • Ignoring else branch coverage
  • Confusing coverage with test success
4. Identify the problem in this JUnit test that causes incomplete coverage of method isValid:
public boolean isValid(int n) {
  if (n > 0) return true;
  else return false;
}

@Test
public void testIsValid() {
  assertTrue(isValid(1));
}
medium
A. Test method missing @Test annotation
B. Test uses assertTrue incorrectly
C. Method isValid has syntax error
D. Test does not check negative input branch

Solution

  1. Step 1: Review test input coverage

    The test only calls isValid(1), covering the positive branch.
  2. Step 2: Check missing branch coverage

    The negative or zero input branch (else) is not tested, causing incomplete coverage.
  3. Final Answer:

    Test does not check negative input branch -> Option D
  4. Quick Check:

    Missing else branch test = incomplete coverage [OK]
Hint: Test all input types to cover branches [OK]
Common Mistakes:
  • Assuming one positive test covers all
  • Thinking assertTrue usage affects coverage
  • Ignoring missing @Test annotation
5. You have a method with multiple conditions:
public String classify(int age) {
  if (age < 13) return "child";
  else if (age < 20) return "teen";
  else return "adult";
}
To achieve 100% coverage, which set of test inputs should you include in your JUnit tests?
hard
A. 0, 12, 20
B. 10, 18
C. 5, 15, 25
D. 15, 25

Solution

  1. Step 1: Identify all branches in classify method

    There are three branches: age < 13, 13 ≤ age < 20, and age ≥ 20.
  2. Step 2: Select test inputs covering all branches

    Inputs 5 (child), 15 (teen), and 25 (adult) cover all branches fully.
  3. Final Answer:

    5, 15, 25 -> Option C
  4. Quick Check:

    One input per branch = full coverage [OK]
Hint: Test one value per branch for full coverage [OK]
Common Mistakes:
  • Missing one branch input
  • Using boundary values without covering all branches
  • Assuming fewer tests cover all cases
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard