2017-05-03 68 views
0

处理异常我有一种方法为RESTAPI单元测试

public class ActivityManager { 
    private ActivityManager activityManager_; 

@Autowired 
public ActivityManager(ActivityManager activityManage) 
{ 
    activityManager_= activityManage; 
} 
@RequestMapping(value ="activityManager/", method = RequestMethod.GET) 
    public List<Data> getData() throws RestControllerException { 
     try { 
      return activityManage_.fetchData(); 
     } catch (Exception ex) { 
      throw new RestControllerException(); 
     } 
    } 
} 

我试图测试抛出异常,但它不工作。我对这种情况感到困惑,resultmatcher应该是什么状态()。

@Test(expected = RestControllerException.class) 
     public void getDataError() throws Exception { 
      ActivityManager activityManagerMock = Mockito.mock(ActivityManager 
       .class); 
doThrow(RestControllerException.class).when(activityManagerMock).fetchData(); 
      mockMvc_.perform(get("/activityManager") 
        .contentType(MediaType.APPLICATION_JSON)) 
     .andExpect(status().isInternalServerError()); 
     } 

是否有任何文档可以阅读有关处理restapi单元测试异常的更多信息? 感谢

+0

你在哪里设置模拟activityManagerMock到Controller bean。?? –

+0

对不起,我编辑它,activityManage是类的名称 – RLe

回答

0
@Autowired 
    private ActivityManagerService activityManager; 

这将注入实际的bean到控制器不是您创建的模拟。

将此添加到您的测试类中。

@Autowired 
private ControllerBean controller; 

@Before 
public void init(){ 
    ReflectionTestUtils.setField(controller, "activityManager", activityManagerMock); 
} 

这会将MockObject设置为Controller的activityManager。 因此,在运行测试时,模拟对象fetchData()将被调用,其中inturn引发异常。