来自Junit

问题描述

我有一个带有POST方法且带有@RestController批注的控制器类

@RequestMapping(value="/test",method = RequestMethod.POST,produces ="application/json")
   public Response updateDetails(@RequestBOdy Request request) throws ServiceException{
     try{
       //Service call for db connection
       response = service.updateDetails(request);
    }catch(IOException s){s.printstacktrace();}
     catch(InterruptedException e){e.printstacktrace();}
     return response;
   }

Junit测试类是

@Test
public void test() {
   Request request = new Request();
   request.setId("session");
   Response response = new Response();
   respoonse.setStatus("200");
   response.setMessage("");

 try{
   Service service = Mockito.mock(Service.class);

//mock values to call catch block
   **when(service.updateDetails(any())).thenThrow(new IOException());
   when(controller.updateDetails(any()).thenThrow(new ServiceException());**
   
   RequestBuilder requestBuilder = mockmvcRequestBuilders.post("/test").accept(MediaType.APPLICATION_JSON).content(request).contentType(MediaType.APPLICATION_JSON);

  try{
    MvcResult result = mvc.perform(requestBuilder).andReturn();
    assertNotNull(result);
  }catch(Exception e){e.printstacktrace();}
  catch(IOException e){e.printstacktrace();}
  catch(InterruptedException e){e.printstacktrace();}
 
 }
}

使用上述控制器和测试用例,我试图覆盖catch块,但是调用根本没有到达catch块。我在测试用例中为控制器类添加了@MockBean。

我只为服务类做了一些数据库更新语句。因此,我没有包括那部分,只是因为我嘲笑了这些值。

请帮助我对控制器类中的块进行代码覆盖。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)