JUnit4を使って、あるコードが例外を投げるかどうかをテストするにはどうしたらいいですか?
確かにこのようなことはできるのですが
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
このような状況では、アノテーションや Assert.xyz などの something を使う方がはるかに不便がなく、JUnit の精神にかなっていることを思い出します。
JUnit 4`ではこれをサポートしています。
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
リファレンス :
こういうのはどうでしょう。 非常に一般的な例外をキャッチし、それがキャッチブロックから出たことを確認した後、その例外のクラスが期待通りのものであることをアサートします。 このアサートは、a)例外の型が間違っている場合(例えば、代わりにNull Pointerを受け取った場合)や、b)例外がスローされなかった場合には失敗します。
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}