例外で何をチェックしたいかによって異なります。例外がスローされたことを確認するだけの場合は、@Test(expected=...)
おそらく次の方法を使用するのが最も簡単な方法です。
@Test(expected=CustomException.class)
public void checkNullObject() throws CustomException {
MyClass myClass= null;
MyCustomClass.get(null);
}
ただし、 @Rule ExpectedException には、 javadocからのメッセージのチェックなど、さらに多くのオプションがあります。
// These tests all pass.
public static class HasExpectedException {
@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void throwsNothing() {
// no exception expected, none thrown: passes.
}
@Test
public void throwsNullPointerException() {
thrown.expect(NullPointerException.class);
throw new NullPointerException();
}
@Test
public void throwsNullPointerExceptionWithMessage() {
thrown.expect(NullPointerException.class);
thrown.expectMessage("happened?");
thrown.expectMessage(startsWith("What"));
throw new NullPointerException("What happened?");
}
@Test
public void throwsIllegalArgumentExceptionWithMessageAndCause() {
NullPointerException expectedCause = new NullPointerException();
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("What");
thrown.expectCause(is(expectedCause));
throw new IllegalArgumentException("What happened?", cause);
}
}
したがって、例外の元の原因であるメッセージを確認できます。メッセージのチェックにはマッチャーが使えるので、チェックなどを行うことができますstartsWith()
。
古いスタイル (Junit 3) の throw/catch を使用する理由の 1 つは、特定の要件がある場合です。これらの多くはありませんが、発生する可能性があります。
@Test
public void testMe() {
try {
Integer.parseInt("foobar");
fail("expected Exception here");
} catch (Exception e) {
// OK
}
}