首页 > 编程知识 正文

mockmvc传递对象,mock测试怎么使用

时间:2023-05-04 08:46:13 阅读:40374 作者:1901

MockMvc- SpringMVC单元测试的独立测试:

一.个人资料

为什么要使用MockMvc?

集成测试模块时,最好能输入URL测试控制器。 启动服务器并构建和测试http客户端时,由于启动速度慢、测试验证不方便、依赖网络环境等测试很麻烦,为了能够测试控制器,引入了MockMVC。

MockMvc实现了Http请求的模拟,可以直接使用网络的形式转换为控制器的调用。 这为测试速度快、独立于网络环境以及统一和方便请求验证提供了一系列验证工具。

二.测试逻辑

MockMvcBuilder构建MockMvc的构造函数;

mockMvc调用perform,执行请求构建器请求,并调用控制器业务处理逻辑;

perform返回结果动作,返回操作结果,通过结果动作,提供了统一的验证方式;

使用StatusResultMatchers验证请求结果;

使用ContentResultMatchers验证请求返回的内容;

三. MockMvcBuilder

MockMvc是在spring测试下非常容易使用的类,他们的初始化必须在setUp中进行。

MockMvcBuilder是构建MockMvc的构造函数,主要有标准MockMvcBuilder和默认MockMvcBuilder两种实现,前者继承后者。

指定mockmvcbuilders.webappcontextsetup (webapplicationcontextcontext ) ),从该上下文中获取相应的控制器,然后单击相应的mockmvc;

通过在mockmvcbuilders.standalone setup (object . controllers )参数中指定一组控制器,无需从上下文中获取。 例如this.mockmvcbuilders.standalders ) )。

这些Builder还提供其他api,可以自己百度

四. MockMvcRequestBuilders

从名称中可以看到,请求构建器用于构建请求,并提供构建MockHttpServletRequest的方法构建请求(servlet context,服务上下文)。 主要有两个子类MockHttpServletRequestBuilder和mockmultiparthttpservletrequestbuilder。 这意味着它用于请求mock客户端所需的所有数据。

主要API :

mockhttpservletrequestbuilderget (stringurltemplate, Object. urlVariables ) :根据uri模板和uri变量的值获取get请求方式的requestbuilder,如果method在controller的方法中选择了RequestMethod.GET,则

POST(stringURLtemplate,Object. urlVariables ) :与get类似,但为post方法;

PUT(stringURLtemplate,Object. urlVariables ) :与get类似,但为put方法;

elete(stringURLtemplate,Object. urlVariables ) :与get类似,但为DELETE方法;

OPTIONS(stringURLtemplate,Object. urlVariables ) :与get类似,但为options方法;

五.结果动作

调用mock MVC.perform (requestbuilderrequestbuilder )可获得结果操作。 结果动作有三种处理方式:

ResultActions.andExpect :添加执行完成后的断言。 添加ResultMatcher验证规则,在控制器运行完成后验证结果正确;

ResultActions.andDo :其中添加调试时可用的结果处理程序,如使用. anddo (mockmvcresulthandlers.print ) )打印整个响应结果信息。

ResultActions.andReturn :表示执行已完成并返回相应的结果

评论:

ResultHandler用于正确处理处理结果,如输出整个请求/响应等信息以方便调试,并由Spring mvc测试框架提供

了MockMvcResultHandlers静态工厂方法,该工厂提供了ResultHandler print()返回一个输出MvcResult详细信息到控制台的ResultHandler实现

例子:

String example= "{"id":1, "name":"kqzu"}";  mockMvc.perform(post("/user")  // 路径            .contentType(MediaType.APPLICATION_JSON)   //用contentType表示具体请求中的媒体类型信息,MediaType.APPLICATION_JSON表示互联网媒体类型的json数据格式(见备注)            .content(example)              .accept(MediaType.APPLICATION_JSON)) //accept指定客户端能够接收的内容类型          .andExpect(content().contentType("application/json;charset=UTF-8")) //验证响应contentType == application/json;charset=UTF-8         .andExpect(jsonPath("$.id").value(1)) //验证id是否为1,jsonPath的使用            .andExpect(jsonPath("$.name).value("kqzhu");  // 验证name是否等于ZhukeqianString errorExample = "{"id":1, "name":"kqzhu"}";  MvcResult result = mockMvc.perform(post("/user")          .contentType(MediaType.APPLICATION_JSON) .content(errorExample)          .accept(MediaType.APPLICATION_JSON)) //执行请求          .andExpect(status().isBadRequest()) //400错误请求,  status().isOk() 正确  status().isNotFound() 验证控制器不存在        .andReturn();  //返回MvcResult

备注:使用Content-type来指定不同格式的请求信息,下面例举在日常的开发中,常会用的若干content-type的内容格式
    例如: Content-Type: text/html;charset:utf-8;
 常见的媒体格式类型如下:
    text/html : HTML格式
    text/plain :纯文本格式      
    text/xml :  XML格式 /
    image/gif :gif图片格式    
    image/jpeg :jpg图片格式 
    image/png:png图片格式
   以application开头的媒体格式类型:
   application/xhtml+xml :XHTML格式
   application/xml     : XML数据格式
   application/atom+xml  :Atom XML聚合格式    
   application/json    : JSON数据格式
   application/pdf       :pdf格式  
   application/msword  : Word文档格式
   application/octet-stream : 二进制流数据(如常见的文件下载)
   application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
   另外一种常见的媒体格式是上传文件之时使用的:
    multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

附录:Requests & Responses 的标识及解释 


六、ResultMatchers 
        ResultMatcher用来匹配执行完请求后的结果验证,其就一个match(MvcResult result)断言方法,如果匹配失败将抛出相应的异常,spring mvc测试框架提供了很多***ResultMatchers来满足测试需求。
具体请百度。

七、MvcResult
        即执行完控制器后得到的整个结果,并不仅仅是返回值,其包含了测试时需要的所有信息。
MockHttpServletRequest getRequest():得到执行的请求;
MockHttpServletResponse getResponse():得到执行后的响应;
Object getHandler():得到执行的处理器,一般就是控制器;
HandlerInterceptor[] getInterceptors():得到对处理器进行拦截的拦截器;
ModelAndView getModelAndView():得到执行后的ModelAndView;
Exception getResolvedException():得到HandlerExceptionResolver解析后的异常;
FlashMap getFlashMap():得到FlashMap;
Object getAsyncResult()/Object getAsyncResult(long timeout):得到异步执行的结果;

资料:史上最全,Spring MVC测试框架详解——服务端测试


原文:https://blog.csdn.net/kqZhu/article/details/78836275
 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。