Saturday, February 22, 2014

@Rule allows me to verify the message

Nice sharing from Stackoverflow peer suggesting a new solution on testing exception. This adds more flexibility to my test. Assuming I'm testing on a class that throw NullPointerException:
public class ClassCauseException {

 public void funcA() throws NullPointerException {
  throw new NullPointerException("Some NULL message");
 }
}
Usually I'll do this:
 @Test(expected=NullPointerException.class)
 public void testFuncB() {
  ClassCauseException c = Mockito.spy(new ClassCauseException());
  c.funcA();
 }
That will only tells me funcA will throw an NullPointerException. But I couldn't verify whether whether the right message is display. Anyhow there is a more elegant way for this issue. With @Rule, I'm allow to verify whether the display message when an Exception is being thrown. For example, when the following test is execute, I'm expecting an NullPointerException will be throw, and a message The NULL value should be display. Eventually the test will failed due to the actual message Some NULL message is display.
public class RuleExceptionTest {

 @Rule
 public ExpectedException exp = ExpectedException.none();
 
 @Test
 public void testFuncA() {
  exp.expect(NullPointerException.class);
  exp.expectMessage("The NULL value");
  ClassCauseException c = new ClassCauseException();
  c.funcA();
 }

}
This could be useful if I care the type of Exception being thrown and what message is being display.

No comments: