Bird
Raised Fist0
JUnittesting~5 mins

assertThrows for exceptions in JUnit - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of assertThrows in JUnit?

assertThrows checks if a specific exception is thrown by a block of code during a test. It helps verify that error handling works as expected.

Click to reveal answer
beginner
How do you use assertThrows to test that a method throws IllegalArgumentException?
assertThrows(IllegalArgumentException.class, () -> {
    methodThatShouldThrow();
});

This runs methodThatShouldThrow() and passes if it throws IllegalArgumentException.

Click to reveal answer
intermediate
What does assertThrows return and how can it be used?

assertThrows returns the thrown exception object. You can use it to check the exception message or other properties.

Exception e = assertThrows(Exception.class, () -> { ... });
assertEquals("Error message", e.getMessage());
Click to reveal answer
intermediate
Why is assertThrows better than using try-catch in tests?

assertThrows makes tests cleaner and clearer by directly expressing the expected exception. It avoids manual try-catch blocks and reduces boilerplate code.

Click to reveal answer
beginner
Can assertThrows check for multiple exception types at once?

No, assertThrows checks for one specific exception type per call. To test multiple exceptions, write separate assertThrows calls for each.

Click to reveal answer
What does assertThrows verify in a JUnit test?
AThat no exceptions are thrown
BThat a specific exception is thrown
CThat a method returns true
DThat a method completes within time
Which of the following is the correct syntax to test for NullPointerException using assertThrows?
AassertThrows(() -> method(), NullPointerException.class);
BassertThrows(method(), NullPointerException.class);
CassertThrows(NullPointerException.class, () -> method());
DassertThrows(NullPointerException, method());
What can you do with the exception object returned by assertThrows?
ACheck its message or properties
BIgnore it
CChange its type
DThrow it again automatically
If the tested code does NOT throw the expected exception, what happens to the test with assertThrows?
AThe test fails
BThe test passes
CThe test is skipped
DThe test throws a runtime error
Is it possible to test multiple exceptions in one assertThrows call?
AYes, by using a wildcard exception
BYes, by listing exceptions separated by commas
CYes, by using an array of exceptions
DNo, test each exception separately
Explain how to use assertThrows to verify that a method throws an exception and how to check the exception message.
Think about how you write the lambda and what assertThrows returns.
You got /3 concepts.
    Describe why using assertThrows is preferred over try-catch blocks in JUnit tests.
    Consider readability and test clarity.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of assertThrows in JUnit testing?
      easy
      A. To check if a specific exception is thrown by a block of code
      B. To verify the return value of a method
      C. To measure the execution time of a method
      D. To skip a test case conditionally

      Solution

      1. Step 1: Understand the role of assertThrows

        assertThrows is designed to check if a certain exception occurs when running some code.
      2. Step 2: Compare with other options

        Options B, C, and D describe different test functions unrelated to exception checking.
      3. Final Answer:

        To check if a specific exception is thrown by a block of code -> Option A
      4. Quick Check:

        assertThrows checks exceptions = A [OK]
      Hint: Remember: assertThrows tests exceptions thrown by code [OK]
      Common Mistakes:
      • Confusing assertThrows with assertEquals
      • Thinking assertThrows measures performance
      • Using assertThrows to skip tests
      2. Which of the following is the correct syntax to use assertThrows in JUnit 5?
      easy
      A. assertThrows(Exception.class, () -> methodCall());
      B. assertThrows(() -> methodCall(), Exception.class);
      C. assertThrows(methodCall(), Exception.class);
      D. assertThrows(Exception.class, methodCall());

      Solution

      1. Step 1: Recall the method signature

        The correct syntax is assertThrows(Exception.class, executable) where executable is a lambda or method reference.
      2. Step 2: Check each option

        assertThrows(Exception.class, () -> methodCall()); matches the correct order and lambda usage. Options A, B, and D have wrong argument order or missing lambda.
      3. Final Answer:

        assertThrows(Exception.class, () -> methodCall()); -> Option A
      4. Quick Check:

        Exception class first, then lambda = C [OK]
      Hint: Exception class first, then lambda with code [OK]
      Common Mistakes:
      • Swapping the order of arguments
      • Passing method call instead of lambda
      • Omitting the lambda expression
      3. What will be the result of this JUnit test?
      import static org.junit.jupiter.api.Assertions.assertThrows;
      
      @Test
      void testDivideByZero() {
        assertThrows(ArithmeticException.class, () -> {
          int result = 10 / 0;
        });
      }
      medium
      A. Test passes but exception type is wrong
      B. Test fails because no exception is thrown
      C. Test fails due to syntax error
      D. Test passes because ArithmeticException is thrown

      Solution

      1. Step 1: Analyze the code inside assertThrows

        The code divides 10 by 0, which throws an ArithmeticException at runtime.
      2. Step 2: Check if exception matches expected

        assertThrows expects ArithmeticException.class, which matches the thrown exception.
      3. Final Answer:

        Test passes because ArithmeticException is thrown -> Option D
      4. Quick Check:

        Exception thrown matches expected = A [OK]
      Hint: Divide by zero throws ArithmeticException [OK]
      Common Mistakes:
      • Assuming no exception is thrown
      • Confusing exception types
      • Thinking test fails on exception
      4. Identify the error in this JUnit test using assertThrows:
      @Test
      void testNullPointer() {
        assertThrows(NullPointerException, () -> {
          String s = null;
          s.length();
        });
      }
      medium
      A. Lambda syntax is incorrect
      B. NullPointerException is not thrown here
      C. Missing .class after NullPointerException
      D. assertThrows cannot test NullPointerException

      Solution

      1. Step 1: Check the exception argument

        The exception class must be passed as NullPointerException.class, not just the class name.
      2. Step 2: Verify lambda and exception thrown

        The lambda syntax is correct and the code throws NullPointerException as expected.
      3. Final Answer:

        Missing .class after NullPointerException -> Option C
      4. Quick Check:

        Exception class needs .class suffix = B [OK]
      Hint: Always add .class after exception name in assertThrows [OK]
      Common Mistakes:
      • Omitting .class after exception
      • Miswriting lambda syntax
      • Assuming exception not thrown
      5. You want to test that a method parseNumber(String s) throws NumberFormatException only when the input is not a valid number. Which of these tests correctly uses assertThrows to check this behavior?
      hard
      A. assertThrows(NumberFormatException.class, () -> parseNumber(123));
      B. assertThrows(NumberFormatException.class, () -> parseNumber("abc"));
      C. assertThrows(Exception.class, () -> parseNumber(null));
      D. assertThrows(NumberFormatException.class, () -> parseNumber("123"));

      Solution

      1. Step 1: Understand the method behavior

        parseNumber should throw NumberFormatException for invalid strings like "abc" but not for valid numbers like "123".
      2. Step 2: Evaluate each test case

        assertThrows(NumberFormatException.class, () -> parseNumber("abc")); tests invalid input "abc" correctly. assertThrows(NumberFormatException.class, () -> parseNumber("123")); tests valid input, so no exception expected. assertThrows(Exception.class, () -> parseNumber(null)); uses a different exception and null input. assertThrows(NumberFormatException.class, () -> parseNumber(123)); passes an integer instead of string, causing compile error.
      3. Final Answer:

        assertThrows(NumberFormatException.class, () -> parseNumber("abc")); -> Option B
      4. Quick Check:

        Test invalid input throws NumberFormatException = D [OK]
      Hint: Test invalid strings with assertThrows for NumberFormatException [OK]
      Common Mistakes:
      • Testing valid input expecting exception
      • Passing wrong argument types
      • Using wrong exception class
      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