【问题标题】:How do you test exception in spring rest controller?你如何在弹簧休息控制器中测试异常?
【发布时间】:2020-04-30 18:08:43
【问题描述】:

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

@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】:

    你可以试试下面的代码,而不是 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());
    

    【讨论】:

    • 所有异常都在 Exception.class 中处理
    • @JonathanHagen :如果它适合你,你可以接受答案。
    猜你喜欢
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多