如何测试异常 java
测试 Java 异常的方法
使用 JUnit 的 assertThrows
JUnit 5 提供了 assertThrows 方法,用于验证代码是否抛出预期的异常。语法如下:
@Test
void testException() {
assertThrows(ExpectedException.class, () -> {
// 触发异常的代码
methodThatShouldThrow();
});
}
此方法会检查 methodThatShouldThrow 是否抛出 ExpectedException 类型的异常。
捕获异常并验证消息
如果需要验证异常的具体消息或属性,可以捕获异常后进行断言:

@Test
void testExceptionMessage() {
Exception exception = assertThrows(ExpectedException.class, () -> {
methodThatShouldThrow();
});
assertEquals("Expected error message", exception.getMessage());
}
使用 try-catch 手动验证
在旧版 JUnit 或需要更复杂验证时,可以手动捕获异常:
@Test
void testExceptionManually() {
try {
methodThatShouldThrow();
fail("Expected exception was not thrown");
} catch (ExpectedException e) {
// 验证异常属性
assertTrue(e.getMessage().contains("specific text"));
}
}
测试自定义异常
对于自定义异常,需确保异常类正确继承 RuntimeException 或 Exception,并通过上述方法测试其触发逻辑和消息。

模拟异常场景
使用 Mockito 模拟依赖对象抛出异常:
@Test
void testMockedException() {
Dependency dependency = mock(Dependency.class);
when(dependency.someMethod()).thenThrow(new ExpectedException("mock error"));
assertThrows(ExpectedException.class, () -> {
serviceUnderTest.useDependency(dependency);
});
}
集成测试中的异常
在 Spring Boot 测试中,验证控制器抛出的异常:
@Test
void testControllerException() throws Exception {
mockMvc.perform(get("/endpoint"))
.andExpect(status().isBadRequest())
.andExpect(result -> assertTrue(result.getResolvedException() instanceof ExpectedException));
}
通过以上方法,可以全面覆盖异常触发条件、类型、消息及上下文的测试需求。






