JUnit では、例外をスローするコードをテストするには、明確で簡潔なアプローチが必要です。例外を手動でチェックすることは可能ですが、慣用的な方法ではありません。
JUnit バージョン 5 および 4.13 では、 @Test(expected = ExceptionClass.class) アノテーションを使用できます。テスト方法について。これは、指定された例外がスローされることを期待します。
例:
@Test(expected = IndexOutOfBoundsException.class) public void testIndexOutOfBoundsException() { ArrayList emptyList = new ArrayList(); emptyList.get(0); }
AssertJ や Google-Truth などのライブラリを使用する場合は、次のように使用できます。検証するための彼らの主張例外。
AssertJ:
import static org.assertj.core.api.Assertions.assertThatThrownBy; @Test public void testFooThrowsIndexOutOfBoundsException() { assertThatThrownBy(() -> foo.doStuff()).isInstanceOf(IndexOutOfBoundsException.class); }
Google-Truth:
import static com.google.common.truth.Truth.assertThat; @Test public void testFooThrowsIndexOutOfBoundsException() { assertThat(assertThrows(IndexOutOfBoundsException.class, foo::doStuff)).isNotNull(); }
以下の JUnit バージョンの場合4.12 では、Rule または TryCatch を使用して例外を処理できます。
Rule の使用:
@Rule public ExpectedException thrown = ExpectedException.none(); @Test public void testIndexOutOfBoundsException() { thrown.expect(IndexOutOfBoundsException.class); ArrayList emptyList = new ArrayList(); emptyList.get(0); }
TryCatch の使用:
import static org.junit.Assert.assertEquals; @Test public void testIndexOutOfBoundsException() { try { ArrayList emptyList = new ArrayList(); emptyList.get(0); fail("IndexOutOfBoundsException was expected"); } catch (IndexOutOfBoundsException e) { assertEquals(e.getClass(), IndexOutOfBoundsException.class); } }
以上がJUnit テストで例外処理をアサートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。