java异常如何验证
验证 Java 异常的方法
使用 JUnit 的 assertThrows
JUnit 5 提供了 assertThrows 方法,可以明确验证代码是否抛出预期的异常。语法如下:
@Test
void testException() {
assertThrows(ExpectedException.class, () -> {
// 可能抛出异常的代码
});
}
使用 try-catch 手动捕获
通过手动捕获异常并验证其类型和消息,可以更灵活地处理异常情况:

@Test
void testExceptionManually() {
try {
// 可能抛出异常的代码
fail("Expected exception not thrown");
} catch (ExpectedException e) {
assertEquals("Expected error message", e.getMessage());
}
}
使用 Mockito 验证异常
在测试依赖注入或模拟对象时,Mockito 可以用于验证异常行为:
@Test
void testMockitoException() {
SomeService mockService = mock(SomeService.class);
when(mockService.someMethod()).thenThrow(new ExpectedException("Error"));
assertThrows(ExpectedException.class, () -> mockService.someMethod());
}
验证异常链
对于嵌套异常或异常链的情况,可以通过检查 getCause 方法验证根本原因:

@Test
void testExceptionCause() {
Exception exception = assertThrows(RuntimeException.class, () -> {
// 抛出异常的代码
});
assertTrue(exception.getCause() instanceof ExpectedCauseException);
}
使用自定义断言
对于复杂的异常验证逻辑,可以封装自定义断言方法:
public static void assertException(Class<? extends Throwable> expectedType,
Executable executable,
String expectedMessage) {
Throwable thrown = assertThrows(expectedType, executable);
assertEquals(expectedMessage, thrown.getMessage());
}
验证异常属性
除了类型和消息外,还可以验证异常的其他属性,如错误代码或自定义字段:
@Test
void testExceptionProperties() {
CustomException exception = assertThrows(CustomException.class, () -> {
// 抛出异常的代码
});
assertEquals(123, exception.getErrorCode());
}






