SpringMVC 详解

MockMvc 
使用之前的MockMvcBuilder.build()得到构建好的MockMvc;这个是mvc测试的核心API,对于该API的使用方式如下: 
Java代码  官网:www.fhadmin.org 收藏代码 
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/user/1"))  
       .andExpect(MockMvcResultMatchers.view().name("user/view"))  
       .andExpect(MockMvcResultMatchers.model().attributeExists("user"))  
       .andDo(MockMvcResultHandlers.print())  
       .andReturn();  
perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理; 
andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确; 
andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台; 
andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理; 

另外还提供了以下API: 
setDefaultRequest:设置默认的RequestBuilder,用于在每次perform执行相应的RequestBuilder时自动把该默认的RequestBuilder合并到perform的RequestBuilder中; 
setGlobalResultMatchers:设置全局的预期结果验证规则,如我们通过MockMvc测试多个控制器时,假设它们都想验证某个规则时,就可以使用这个; 
setGlobalResultHandlers:设置全局的ResultHandler结果处理器; 
  
RequestBuilder/MockMvcRequestBuilders 
从名字可以看出,RequestBuilder用来构建请求的,其提供了一个方法buildRequest(ServletContext servletContext)用于构建MockHttpServletRequest;其主要有两个子类MockHttpServletRequestBuilder和MockMultipartHttpServletRequestBuilder(如文件上传使用),即用来Mock客户端请求需要的所有数据。 

MockMvcRequestBuilders主要API: 
MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根据uri模板和uri变量值得到一个GET请求方式的MockHttpServletRequestBuilder;如get("/user/{id}", 1L); 
MockHttpServletRequestBuilder post(String urlTemplate, Object... urlVariables):同get类似,但是是POST方法; 
MockHttpServletRequestBuilder put(String urlTemplate, Object... urlVariables):同get类似,但是是PUT方法; 
MockHttpServletRequestBuilder delete(String urlTemplate, Object... urlVariables) :同get类似,但是是DELETE方法; 
MockHttpServletRequestBuilder options(String urlTemplate, Object... urlVariables):同get类似,但是是OPTIONS方法; 
MockHttpServletRequestBuilder request(HttpMethod httpMethod, String urlTemplate, Object... urlVariables):提供自己的Http请求方法及uri模板和uri变量,如上API都是委托给这个API; 
MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... urlVariables):提供文件上传方式的请求,得到MockMultipartHttpServletRequestBuilder; 
RequestBuilder asyncDispatch(final MvcResult mvcResult):创建一个从启动异步处理的请求的MvcResult进行异步分派的RequestBuilder; 

接下来再看看MockHttpServletRequestBuilder和MockMultipartHttpServletRequestBuilder API: 
MockHttpServletRequestBuilder API: 
MockHttpServletRequestBuilder header(String name, Object... values)/MockHttpServletRequestBuilder headers(HttpHeaders httpHeaders):添加头信息; 
MockHttpServletRequestBuilder contentType(MediaType mediaType):指定请求的contentType头信息; 
MockHttpServletRequestBuilder accept(MediaType... mediaTypes)/MockHttpServletRequestBuilder accept(String... mediaTypes):指定请求的Accept头信息; 
MockHttpServletRequestBuilder content(byte[] content)/MockHttpServletRequestBuilder content(String content):指定请求Body体内容; 
MockHttpServletRequestBuilder cookie(Cookie... cookies):指定请求的Cookie; 
MockHttpServletRequestBuilder locale(Locale locale):指定请求的Locale; 
MockHttpServletRequestBuilder characterEncoding(String encoding):指定请求字符编码; 
MockHttpServletRequestBuilder requestAttr(String name, Object value) :设置请求属性数据; 
MockHttpServletRequestBuilder sessionAttr(String name, Object value)/MockHttpServletRequestBuilder sessionAttrs(Map<String, Object> sessionAttributes):设置请求session属性数据; 
MockHttpServletRequestBuilder flashAttr(String name, Object value)/MockHttpServletRequestBuilder flashAttrs(Map<String, Object> flashAttributes):指定请求的flash信息,比如重定向后的属性信息; 
MockHttpServletRequestBuilder session(MockHttpSession session) :指定请求的Session; 
MockHttpServletRequestBuilder principal(Principal principal) :指定请求的Principal; 
MockHttpServletRequestBuilder contextPath(String contextPath) :指定请求的上下文路径,必须以“/”开头,且不能以“/”结尾; 
MockHttpServletRequestBuilder pathInfo(String pathInfo) :请求的路径信息,必须以“/”开头; 
MockHttpServletRequestBuilder secure(boolean secure):请求是否使用安全通道; 
MockHttpServletRequestBuilder with(RequestPostProcessor postProcessor):请求的后处理器,用于自定义一些请求处理的扩展点; 

MockMultipartHttpServletRequestBuilder继承自MockHttpServletRequestBuilder,又提供了如下API: 
MockMultipartHttpServletRequestBuilder file(String name, byte[] content)/MockMultipartHttpServletRequestBuilder file(MockMultipartFile file):指定要上传的文件; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值