您如何在弹簧支架控制器中测试异常?

问题描述 投票:0回答:1

我正在尝试测试是否在我的rest控制器中引发了异常。这是我的休息控制器:

@DeleteMapping
public ResponseEntity<Void> cancel(@RequestParam long id) {
    if(id < 1) {
       throw new MyException();
    }
    try {
       doSomething();
    }
   catch (SomeException e) {
      throw new MyException();
   }
}

这是我的测试:

private MockMvc mockMvc;

@BeforeMethod
public void beforeMethod() {
    initMocks(this);
    mockMvc = standaloneSetup(new StudyDispatcherController(studyDispatcherService)).build();
}

@Test (expectedExceptions = MyException.class)
public void cancelWithInvalidParam() throws Exception {
    mockMvc.perform(delete(BASE_URL).param("id", "-1").contentType("application/json").accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());

@Test (expectedExceptions = MyException.class)
public void cancelWithException() throws Exception {
    doThrow(SomeException.class).when(myService).doSomething();
    mockMvc.perform(delete(BASE_URL).param("id", "123").contentType("application/json").accept(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError());
}

但是,它抛出org.springframework.web.util.NestedServletException:请求处理失败;

我该如何以正确的方式处理?

java spring rest mockito mockmvc
1个回答
1
投票

您可以尝试使用下面的代码来代替cancelWithInvalidParam()方法吗?>>

@Test (expectedExceptions = Exception.class)
public void cancelWithInvalidParam() throws Exception {
mockMvc.perform(delete(BASE_URL).param("id", "-1").contentType("application/json").accept(MediaType.APPLICATION_JSON)).andExpect(status().isBadRequest());
© www.soinside.com 2019 - 2024. All rights reserved.