Bird
Raised Fist0
JUnittesting~5 mins

Why coverage measures test completeness in JUnit

Choose your learning style10 modes available
Introduction

Coverage shows how much of your code is tested. It helps find parts not checked by tests.

When you want to know if your tests check all important code parts.
Before releasing software to ensure key functions are tested.
When adding new features to confirm tests cover new code.
To find untested code that might cause bugs.
When improving test quality by increasing coverage.
Syntax
JUnit
No direct code syntax; coverage is measured by tools that analyze test runs.
Coverage tools track which lines or branches run during tests.
Higher coverage means more code is tested, but 100% coverage doesn't guarantee no bugs.
Examples
This test covers the add method of Calculator. Coverage tools will mark the add method as tested.
JUnit
// Example: JUnit test class
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

class CalculatorTest {
    @Test
    void testAdd() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }
}
If no test calls subtract, coverage tools show subtract as uncovered, indicating incomplete tests.
JUnit
// Example: Missing test for subtract method
class Calculator {
    int add(int a, int b) { return a + b; }
    int subtract(int a, int b) { return a - b; }
}
Sample Program

This test class only tests the add method. Coverage tools will report that subtract is not covered, showing test incompleteness.

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

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

class CalculatorTest {
    @Test
    void testAdd() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }
}
OutputSuccess
Important Notes

Coverage helps find untested code but does not check test quality.

Use coverage with other testing practices for best results.

Summary

Coverage measures how much code tests run through.

It shows which parts of code are not tested yet.

Higher coverage helps improve test completeness but is not the only goal.

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