This test checks if calling a method on null throws a NullPointerException.
JUnit
assertThrows(NullPointerException.class, () -> {
String s = null;
s.length();
});
Sample Program
This test checks if dividing by zero throws an ArithmeticException. The test passes if the exception is thrown.
JUnit
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
public class ExceptionTest {
@Test
void testDivideByZero() {
assertThrows(ArithmeticException.class, () -> {
int result = 10 / 0;
});
}
}
OutputSuccess
Important Notes
If the code does not throw the expected exception, the test will fail.
You can capture the thrown exception by assigning the result of assertThrows to a variable.
Use assertThrows to make your tests clear and focused on error handling.
Summary
assertThrows checks if code throws the right exception.
It helps catch errors and improve code safety.
Use it with a lambda to test error cases simply.
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
Step 1: Understand the role of assertThrows
assertThrows is designed to check if a certain exception occurs when running some code.
Step 2: Compare with other options
Options B, C, and D describe different test functions unrelated to exception checking.
Final Answer:
To check if a specific exception is thrown by a block of code -> Option A
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
Step 1: Recall the method signature
The correct syntax is assertThrows(Exception.class, executable) where executable is a lambda or method reference.
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.
Final Answer:
assertThrows(Exception.class, () -> methodCall()); -> Option A
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
Step 1: Analyze the code inside assertThrows
The code divides 10 by 0, which throws an ArithmeticException at runtime.
Step 2: Check if exception matches expected
assertThrows expects ArithmeticException.class, which matches the thrown exception.
Final Answer:
Test passes because ArithmeticException is thrown -> Option D
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:
The exception class must be passed as NullPointerException.class, not just the class name.
Step 2: Verify lambda and exception thrown
The lambda syntax is correct and the code throws NullPointerException as expected.
Final Answer:
Missing .class after NullPointerException -> Option C
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
Step 1: Understand the method behavior
parseNumber should throw NumberFormatException for invalid strings like "abc" but not for valid numbers like "123".
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.
Final Answer:
assertThrows(NumberFormatException.class, () -> parseNumber("abc")); -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.