What if you could catch hidden errors instantly without watching every step yourself?
Why assertThrows usage in JUnit? - Purpose & Use Cases
Imagine you have a piece of code that should throw an error when something goes wrong, like dividing by zero. You try to check this by running the code and watching the console for errors manually.
Manually checking for errors is slow and easy to miss. You might forget to test some cases or misinterpret the results. It’s like trying to catch a mistake by watching a movie without pausing—it’s easy to overlook important moments.
The assertThrows method in JUnit lets you automatically check if the right error happens when you run your code. It’s like having a smart assistant who watches carefully and tells you exactly if the error appears or not.
try { divide(5, 0); fail("Expected exception not thrown"); } catch (ArithmeticException e) { // test passes }
assertThrows(ArithmeticException.class, () -> divide(5, 0));
It makes testing error cases fast, clear, and reliable, so you can trust your code works correctly even when things go wrong.
When building a calculator app, you want to be sure dividing by zero throws an error. Using assertThrows, you can quickly test this and avoid crashes in your app.
Manual error checks are slow and unreliable.
assertThrows automates error testing clearly and simply.
This helps catch bugs early and keeps your code safe.
Practice
assertThrows in JUnit testing?Solution
Step 1: Understand the role of assertThrows
assertThrowsis used to test if a particular exception occurs when running a piece of code.Step 2: Compare with other assertions
Other assertions check values or states, butassertThrowsspecifically checks for exceptions.Final Answer:
To check if a specific exception is thrown by a code block -> Option AQuick Check:
assertThrows = Exception check [OK]
- Confusing assertThrows with assertEquals
- Using assertThrows to check return values
- Expecting assertThrows to measure performance
assertThrows in JUnit 5?Solution
Step 1: Recall assertThrows method signature
The correct syntax isassertThrows(Exception.class, Executable)where Executable is a lambda or method reference.Step 2: Analyze options
assertThrows(Exception.class, () -> methodCall()); matches the correct syntax: exception class first, then lambda expression.Final Answer:
assertThrows(Exception.class, () -> methodCall()); -> Option AQuick Check:
assertThrows(Exception.class, lambda) = correct syntax [OK]
- Swapping parameters order
- Passing method call instead of lambda
- Omitting lambda expression
assertThrows(IllegalArgumentException.class, () -> {
throw new IllegalArgumentException("Invalid argument");
});Solution
Step 1: Check the exception thrown
The lambda throwsIllegalArgumentException, which matches the expected exception class.Step 2: Understand assertThrows behavior
assertThrows passes if the expected exception is thrown during execution.Final Answer:
Test passes because the expected exception is thrown -> Option DQuick Check:
Thrown exception matches expected = pass [OK]
- Thinking test fails if exception is thrown
- Confusing exception message with test result
- Assuming syntax error without checking code
assertThrows(NullPointerException.class, () -> {
String s = null;
s.length();
});Solution
Step 1: Analyze the code inside lambda
Callings.length()on a null string throwsNullPointerException.Step 2: Check assertThrows parameters
Expected exception isNullPointerException.class, matching the thrown exception.Final Answer:
No error; test will pass as NullPointerException is thrown -> Option CQuick Check:
NullPointerException thrown and expected = pass [OK]
- Assuming s.length() throws different exception
- Thinking lambda syntax is wrong
- Confusing exception class with superclass
void testDivideByZero() {
ArithmeticException thrown = assertThrows(ArithmeticException.class, () -> {
int result = 10 / 0;
});
assertEquals("/ by zero", thrown.getMessage());
}What does this test verify beyond just exception throwing?
Solution
Step 1: Understand assertThrows return value
assertThrows returns the thrown exception object, here stored inthrown.Step 2: Analyze the assertEquals check
The test checks that the exception message equals "/ by zero", verifying the exact error message.Final Answer:
It verifies the exception message is exactly "/ by zero" -> Option BQuick Check:
Exception message checked = It verifies the exception message is exactly "/ by zero" [OK]
- Thinking it checks return value of division
- Assuming exception type is RuntimeException
- Ignoring the message assertion
Ready to prove it?
Pass the test and this pattern moves unknown
