Bird
Raised Fist0
Testing Fundamentalstesting~15 mins

Why different testing levels catch different bugs in Testing Fundamentals - Automation Benefits in Action

Choose your learning style10 modes available
Verify bug detection at different testing levels
Preconditions (2)
Step 1: Run unit tests on each calculator function separately
Step 2: Run integration tests on combined operations (e.g., multiply then divide)
Step 3: Run system tests on the full calculator UI by performing operations
Step 4: Observe which bugs are detected at each testing level
✅ Expected Result: Unit tests catch the bug in the add function; integration tests catch the bug in combined multiply/divide operations; system tests catch the UI display bug
Automation Requirements - pytest
Assertions Needed:
Assert that unit tests fail for add function bug
Assert that integration tests fail for multiply/divide bug
Assert that system tests fail for UI display bug
Best Practices:
Use clear test function names indicating testing level
Isolate unit tests from UI and integration
Use fixtures to set up calculator instances
Use pytest markers to separate test levels
Automated Solution
Testing Fundamentals
import pytest

class Calculator:
    def add(self, a, b):
        # Bug: returns wrong sum intentionally
        return a + b + 1

    def subtract(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        if b == 0:
            raise ValueError("Cannot divide by zero")
        return a / b

# Unit tests
@pytest.mark.unit
def test_add_bug():
    calc = Calculator()
    result = calc.add(2, 3)
    assert result == 5, f"Expected 5 but got {result}"

@pytest.mark.unit
def test_subtract():
    calc = Calculator()
    assert calc.subtract(5, 3) == 2

# Integration test
@pytest.mark.integration
def test_multiply_divide_bug():
    calc = Calculator()
    mul = calc.multiply(4, 5)  # 20
    # Bug: divide returns wrong result if multiply used before
    # Simulate bug by altering divide to return wrong value if mul was called
    # For demo, we simulate bug by forcing wrong divide result
    divide_result = mul / 0  # This will raise ZeroDivisionError to simulate bug
    assert divide_result == 4, f"Expected 4 but got {divide_result}"

# System test
@pytest.mark.system
def test_ui_display_bug():
    # Simulate UI display bug by checking displayed result string
    displayed_result = "Result is 9"  # Bug: should be 8
    expected_display = "Result is 8"
    assert displayed_result == expected_display, f"UI display bug: expected '{expected_display}' but got '{displayed_result}'"

This test script uses pytest to automate testing at different levels.

The Calculator class has a bug in the add method (returns sum + 1).

Unit tests check individual functions like add and subtract. The test_add_bug test will fail because of the bug.

Integration test test_multiply_divide_bug simulates a bug when combining multiply and divide. It intentionally causes a division by zero error to represent a bug caught at integration level.

System test test_ui_display_bug simulates a UI display bug by comparing expected and actual displayed strings.

Using @pytest.mark decorators helps separate tests by level for clarity and selective running.

Common Mistakes - 3 Pitfalls
Not isolating unit tests from integration or system tests
Hardcoding expected results without considering known bugs
{'mistake': 'Not simulating realistic bugs at each level', 'why_bad': "Tests won't show the value of different testing levels in catching bugs.", 'correct_approach': 'Create simple but clear bugs in code or test data that each level can catch.'}
Bonus Challenge

Now add data-driven testing with 3 different input sets for the add function to show the bug consistently.

Show Hint

Practice

(1/5)
1. Which testing level focuses on checking individual parts of the software separately?
easy
A. Acceptance Testing
B. System Testing
C. Integration Testing
D. Unit Testing

Solution

  1. Step 1: Understand testing levels

    Unit testing checks small parts or units of code individually.
  2. Step 2: Compare options to definitions

    System testing checks the whole system, integration testing checks combined parts, acceptance testing checks if requirements are met.
  3. Final Answer:

    Unit Testing -> Option D
  4. Quick Check:

    Individual parts = Unit Testing [OK]
Hint: Unit testing tests small parts alone [OK]
Common Mistakes:
  • Confusing integration testing with unit testing
  • Thinking system testing tests parts separately
  • Mixing acceptance testing with unit testing
2. Which of the following is the correct order of testing levels from smallest to largest scope?
easy
A. System Testing -> Integration Testing -> Unit Testing
B. Unit Testing -> Integration Testing -> System Testing
C. Integration Testing -> Unit Testing -> System Testing
D. Acceptance Testing -> System Testing -> Unit Testing

Solution

  1. Step 1: Identify scope sizes

    Unit testing checks smallest parts, integration testing checks combined parts, system testing checks whole system.
  2. Step 2: Arrange from smallest to largest

    Correct order is Unit Testing, then Integration Testing, then System Testing.
  3. Final Answer:

    Unit Testing -> Integration Testing -> System Testing -> Option B
  4. Quick Check:

    Smallest to largest = A [OK]
Hint: Remember: Unit, Integration, System order [OK]
Common Mistakes:
  • Reversing the order of testing levels
  • Confusing integration with system testing
  • Including acceptance testing in the wrong place
3. Consider this scenario: A bug appears only when two modules interact but not in individual modules. Which testing level is most likely to catch this bug?
medium
A. Integration Testing
B. Unit Testing
C. System Testing
D. Acceptance Testing

Solution

  1. Step 1: Analyze bug context

    The bug appears only when two modules interact, so it is related to combined parts.
  2. Step 2: Match testing level to bug type

    Integration testing focuses on testing combined modules and their interactions.
  3. Final Answer:

    Integration Testing -> Option A
  4. Quick Check:

    Bug in combined modules = Integration Testing [OK]
Hint: Bugs in combined parts? Think Integration Testing [OK]
Common Mistakes:
  • Choosing unit testing for interaction bugs
  • Confusing system testing with integration testing
  • Assuming acceptance testing finds module interaction bugs
4. A tester wrote a test that checks the entire software system but missed testing how modules work together. What testing level did they likely skip?
medium
A. Integration Testing
B. Unit Testing
C. Acceptance Testing
D. System Testing

Solution

  1. Step 1: Understand the test scope

    The tester tested the whole system but did not check module interactions.
  2. Step 2: Identify missing testing level

    Integration testing specifically checks how modules work together, so it was likely skipped.
  3. Final Answer:

    Integration Testing -> Option A
  4. Quick Check:

    Missed module interaction = Integration Testing [OK]
Hint: Check module interactions with Integration Testing [OK]
Common Mistakes:
  • Confusing system testing with integration testing
  • Assuming unit testing covers module interactions
  • Thinking acceptance testing covers module integration
5. A software project has a bug that only appears when the full system runs with real user data, but not during unit or integration tests. Which testing level is best suited to find this bug?
hard
A. Unit Testing
B. Integration Testing
C. System Testing
D. Acceptance Testing

Solution

  1. Step 1: Analyze bug conditions

    The bug appears only when the full system runs with real user data, not in smaller tests.
  2. Step 2: Match testing level to scenario

    System testing checks the entire system working together, often with realistic data, so it is best to find such bugs.
  3. Final Answer:

    System Testing -> Option C
  4. Quick Check:

    Full system with real data = System Testing [OK]
Hint: Full system bugs? Use System Testing [OK]
Common Mistakes:
  • Choosing unit or integration testing for full system bugs
  • Confusing acceptance testing with system testing
  • Ignoring the importance of real user data in tests
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