异常处理
//异常处理
MvcResult result = mockMvc.perform(get(/user/exception)) //执行请求
.andExpect(status().isInternalServerError()) //验证服务器内部错误
.andReturn();
Assert.assertTrue(IllegalArgumentException.class.isAssignableFrom(result.getResolvedException().getClass()));
静态资源
//静态资源
mockMvc.perform(get(/static/app.js)) //执行请求
.andExpect(status().isOk()) //验证状态码200
.andExpect(content().string(CoreMatchers.containsString(var)));//验证渲染后的视图内容包含var
mockMvc.perform(get(/static/app1.js)) //执行请求
.andExpect(status().isNotFound()); //验证状态码404
异步测试
//Callable
MvcResult result = mockMvc.perform(get(/user/async1 id=1&name=zhang)) //执行请求
.andExpect(request().asyncStarted())
.andExpect(request().asyncResult(CoreMatchers.instanceOf(User.class))) //默认会等10秒超时
.andReturn();
mockMvc.perform(asyncDispatch(result))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath($.id).value(1));
//DeferredResult
result = mockMvc.perform(get(/user/async2 id=1&name=zhang)) //执行请求
.andExpect(request().asyncStarted())
.andExpect(request().asyncResult(CoreMatchers.instanceOf(User.class))) //默认会等10秒超时
.andReturn();
mockMvc.perform(asyncDispatch(result))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath($.id).value(1));
此处请在第一次请求时加上 andExpect(request().asyncResult(CoreMatchers.instanceOf(User.class)))这样会等待结果返回/超时,无须自己设置线程等待了;此处注意request().asyncResult一定是在第一次请求发出;然后第二次通过asyncDispatch进行异步请求。
添加自定义过滤器
mockMvc = webAppContextSetup(wac).addFilter(new MyFilter(), /*).build();
mockMvc.perform(get(/user/1))
.andExpect(request().attribute(filter, true));
全局配置
mockMvc = webAppContextSetup(wac)
.defaultRequest(get(/user/1).requestAttr(default, true)) //默认请求 如果其是Mergeable类型的,会自动合并的哦mockMvc.perform中的RequestBuilder
.alwaysDo(print()) //默认每次执行请求后都做的动作
.alwaysExpect(request().attribute(default, true)) //默认每次执行后进行验证的断言
.build();
mockMvc.perform(get(/user/1))
.andExpect(model().attributeExists(user));
以上代码请参考 我的github。更多参考示例请 前往Spring github。
只要记住测试步骤,按照步骤操作,整个测试过程是非常容易理解的:
1、准备测试环境
2、通过MockMvc执行请求
3.1、添加验证断言
3.2、添加结果处理器
3.3、得到MvcResult进行自定义断言/进行下一步的异步请求
4、卸载测试环境
对于单元测试步骤请参考:加速Java应用开发速度3——单元/集成测试+CI。