springboot 单测捕获异常
时间: 2023-12-09 12:36:47 浏览: 143
以下是使用SpringBoot进行单元测试并捕获异常的示例代码:
```java
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SpringbootstudyApplication.class})
@AutoConfigureMockMvc
@Transactional
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testException() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/user/exception"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(500))
.andExpect(MockMvcResultMatchers.jsonPath("$.message").value("自定义异常信息"));
}
}
```
在上述代码中,我们使用了`@RunWith(SpringRunner.class)`和`@SpringBootTest(classes = {SpringbootstudyApplication.class})`注解来启动整个SpringBoot工程。同时,我们使用了`@AutoConfigureMockMvc`注解来自动配置MockMvc对象,以便我们可以方便地进行单元测试。
在`testException()`方法中,我们使用了`mockMvc.perform()`方法来模拟发送GET请求,并使用`andExpect()`方法来验证响应结果。在这个例子中,我们期望响应的状态码为200,并且响应的JSON数据中包含一个`code`字段,其值为500,以及一个`message`字段,其值为"自定义异常信息"。
如果我们的控制器方法抛出了异常,那么我们可以使用`@ExceptionHandler`注解来捕获这个异常并返回一个自定义的错误响应。例如:
```java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception e) {
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setCode(500);
errorResponse.setMessage("自定义异常信息");
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse);
}
}
```
在上述代码中,我们使用`@RestControllerAdvice`注解来定义一个全局的异常处理器。在`handleException()`方法中,我们捕获了所有类型的异常,并返回一个自定义的错误响应。这个错误响应包含一个`code`字段和一个`message`字段,分别表示错误码和错误信息。
阅读全文