2017-05-03 64 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引發異常。