Search code examples
javatestingannotationsjunit4assertion

How do I assert my exception message with JUnit Test annotation?


I have written a few JUnit tests with @Test annotation. If my test method throws a checked exception and if I want to assert the message along with the exception, is there a way to do so with JUnit @Test annotation? AFAIK, JUnit 4.7 doesn't provide this feature but does any future versions provide it? I know in .NET you can assert the message and the exception class. Looking for similar feature in the Java world.

This is what I want:

@Test (expected = RuntimeException.class, message = "Employee ID is null")
public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() {}

Solution

  • You could use the @Rule annotation with ExpectedException, like this:

    @Rule
    public ExpectedException expectedEx = ExpectedException.none();
    
    @Test
    public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() throws Exception {
        expectedEx.expect(RuntimeException.class);
        expectedEx.expectMessage("Employee ID is null");
    
        // do something that should throw the exception...
        System.out.println("=======Starting Exception process=======");
        throw new NullPointerException("Employee ID is null");
    }
    

    Note that the example in the ExpectedException docs is (currently) wrong - there's no public constructor, so you have to use ExpectedException.none().