在 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中文网其他相关文章!