JUnit Tip: Verifying that an Exception with a Particular Message was Thrown
JUnit has a hidden treasure which makes it easy to do something we have long longed for - namely not only to verify that an exception of a particular type has been thrown but also that its message contains the expected message. The hidden pearl is the @Rule ExpectedException and its JavaDoc documents well how to use it (slightly modified):
(As you might have noticed, it uses Hamcrest matchers; containsString isn't included directly in junit and thus you'd need junit-dep + hamcrest jars.)
import org.junit.*;
import org.junit.rules.ExpectedException;
public static class HasExpectedException {
@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void throwsNothing() {
// no exception expected, none thrown: passes.
}
@Test
public void throwsNullPointerExceptionWithMessage() {
thrown.expect(NullPointerException.class);
thrown.expectMessage("What happened here?");
thrown.expectMessage(allOf(containsString("What"), containsString("here")));
throw new NullPointerException("What happened here?");
}
}
(As you might have noticed, it uses Hamcrest matchers; containsString isn't included directly in junit and thus you'd need junit-dep + hamcrest jars.)