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

annotations, assertion, java, junit4, testing

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()`.

Problem

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() {} ```

Original source