处理RestAPI单元测试的异常

时间:2017-05-03 21:09:26

标签: unit-testing spring-mvc mockmvc

我有一个方法

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();
        }
     }
}

我尝试测试throw异常,但它不起作用。我对于结果匹配器的状态()应该是什么感到困惑。

    @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单元测试异常的文档? 谢谢

1 个答案:

答案 0 :(得分:0)

 @Autowired
    private ActivityManagerService activityManager;

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

在测试类中添加它。

@Autowired
private ControllerBean controller;

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

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