jakub holý

building the right thing, building it right, fast

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):

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