0
0
JUnittesting~20 mins

assertThrows for exceptions in JUnit - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
AssertThrows Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the result of this JUnit test using assertThrows?
Consider the following JUnit 5 test method. What will be the test execution result?
JUnit
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;

class Calculator {
    int divide(int a, int b) {
        return a / b;
    }
}

public class CalculatorTest {
    @Test
    void testDivideByZero() {
        Calculator calc = new Calculator();
        assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
    }
}
ATest passes because ArithmeticException is thrown as expected.
BTest fails because no exception is thrown.
CTest fails because NullPointerException is thrown instead.
DTest fails due to a compilation error in the test code.
Attempts:
2 left
💡 Hint
Think about what happens when dividing by zero in Java.
assertion
intermediate
2:00remaining
Which assertThrows usage correctly verifies NullPointerException?
You want to test that calling method process(null) throws NullPointerException. Which assertThrows statement is correct?
JUnit
class Processor {
    void process(String input) {
        if (input == null) throw new NullPointerException();
    }
}
AassertThrows(NullPointerException.class, () -> processor.process("text"));
BassertThrows(Exception.class, () -> processor.process(null));
CassertThrows(IllegalArgumentException.class, () -> processor.process(null));
DassertThrows(NullPointerException.class, () -> processor.process(null));
Attempts:
2 left
💡 Hint
The exception type must match exactly the one thrown.
🔧 Debug
advanced
2:00remaining
Why does this assertThrows test fail unexpectedly?
Examine the test below. It is supposed to check that getItem(-1) throws IndexOutOfBoundsException, but the test fails. Why?
JUnit
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
import java.util.List;

public class ListTest {
    @Test
    void testGetItem() {
        List<String> list = List.of("a", "b", "c");
        assertThrows(IndexOutOfBoundsException.class, () -> list.get(1));
    }
}
AThe test fails because List.of creates a mutable list that throws a different exception.
BThe test fails because list.get(1) returns "b" and does not throw an exception.
CThe test fails because IndexOutOfBoundsException is not the correct exception type.
DThe test fails because assertThrows requires a try-catch block around the lambda.
Attempts:
2 left
💡 Hint
Check the index used in list.get and the list size.
🧠 Conceptual
advanced
2:00remaining
What does assertThrows return and how can it be used?
In JUnit 5, assertThrows returns the caught exception. How can this feature be used in tests?
ATo automatically retry the test if the exception occurs.
BTo suppress the exception so the test continues without failure.
CTo verify the exception message or properties after catching it.
DTo convert checked exceptions into unchecked exceptions.
Attempts:
2 left
💡 Hint
Think about what you can do with the exception object after catching it.
framework
expert
2:00remaining
How to test a method that throws a checked exception using assertThrows?
Given a method that throws IOException, which assertThrows usage correctly tests it?
JUnit
import java.io.IOException;

class FileReader {
    void readFile(String path) throws IOException {
        if (path == null) throw new IOException("Path is null");
    }
}
AassertThrows(IOException.class, () -> { fileReader.readFile(null); });
BassertThrows(Exception.class, () -> fileReader.readFile(null));
CassertThrows(IOException.class, () -> fileReader.readFile(null));
DassertThrows(IOException.class, () -> fileReader.readFile("file.txt"));
Attempts:
2 left
💡 Hint
Checked exceptions require handling or declaration in lambda.