MockMVC单元测试Controller

MockMVC单元测试Controller

编写controller类

编写测试类ctrl+Shit +T 生成单元测试类

  • @RunWith(SpringJUnit4ClassRunner.class)JUnit类运行器,会为JUnit测试加载Spring应用程序上下文,并为测试类自动织入所需的Bean。
  • @SpringBootTest(classes = App.class)
  • @ContextConfiguration(
    classes=AddressBookConfiguration.class) n指定了如何加载应用程序上下文。此处我们让它加载AddressBookConfiguration里配置的Spring应用程序上下文

测试逻辑

    1. MockMVCBuilder构造MockMvc的构造器
  1. 使用mokMvc调用perform,执行RequestBuild请求,调用controller业务
  2. perform返回ResultActions,返回结果,通过ResultActions提供统一验证
  3. 使用StatusResultMatchers对请求结果进行验证
  4. ContentResultMatchers对请求内容进行验证

具体API

  • MockMvc的初始化需要在setUp中进行,MockMvcBuild用来构造MockMvc的构造器

    • 实现类

      • 1.StandaloneMockMvcBuilder
        ① MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的MockMvc; 继承于后者
      • DefaultMockMvcBuilder② MockMvcBuilders.standaloneSetup(Object… controllers):通过参数指定一组控制器,这样就不需要从上下文获取了,比如this.mockMvc = MockMvcBuilders.standaloneSetup(this.controller).build();
  • MockMvcRequestBuilders 用于构建请求 其提供了一个方法buildRequest(ServletContext servletContext)用于构建MockHttpServletRequest;其主要有两个子类MockHttpServletRequestBuilder和MockMultipartHttpServletRequestBuilder(如文件上传使用),即用来Mock客户端请求需要的所有数据。

    • MockHttpServletRequestBuilder get(String urlTemplate, Object… urlVariables):根据uri模板和uri变量值得到一个GET请求方式的RequestBuilder,如果在controller的方法中method选择的是RequestMethod.GET,那在controllerTest中对应就要使用MockMvcRequestBuilders.get。
    • post(String urlTemplate, Object… urlVariables):同get类似,但是是POST方法;
      put(String urlTemplate, Object… urlVariables):同get类似,但是是PUT方法;
      delete(String urlTemplate, Object… urlVariables) :同get类似,但是是DELETE方法;
      options(String urlTemplate, Object… urlVariables):同get类似,但是是OPTIONS方法;
  • ResultActions

    • 调用MockMvc.perform(RequestBuilder requestBuilder)后将得到ResultActions,对ResultActions有以下三种处理:

      1. ResultActions.andExpect:添加执行完成后的断言。添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
      1. ResultActions.andDo:添加一个结果处理器,比如.andDo(MockMvcResultHandlers.print())输出整个响应结果信息,可以在调试的时候使用。
      1. ResultActions.andReturn:表示执行完成后返回相应的结果
    • 备注:
      ResultHandler用于对处理的结果进行相应处理的,比如输出整个请求/响应等信息方便调试,Spring mvc测试框架提供了MockMvcResultHandlers静态工厂方法,该工厂提供了ResultHandler print()返回一个输出MvcResult详细信息到控制台的ResultHandler实现

  • 使用Content-type来指定不同格式的请求信息
    //用contentType表示具体请求中的媒体类型信息,

    • Content-type(MediaType.APPLICATION_JSON) MediaType.APPLICATION_JSON表示互联网媒体类型的json数据格式(见备注)
  • ResultMatchers

    • ResultMatcher用来匹配执行完请求后的结果验证,其就一个match(MvcResult result)断言方法,如果匹配失败将抛出相应的异常
  • MvcResult 即执行完控制器后得到的整个结果,并不仅仅是返回值,其包含了测试时需要的所有信息。

    • MockHttpServletRequest getRequest():得到执行的请求;
    • MockHttpServletResponse getResponse():得到执行后的响应;
    • Object getHandler():得到执行的处理器,一般就是控制器;
    • HandlerInterceptor[] getInterceptors():得到对处理器进行拦截的拦截器;
    • ModelAndView getModelAndView():得到执行后的ModelAndView;
    • Exception getResolvedException():得到HandlerExceptionResolver解析后的异常;
    • FlashMap getFlashMap():得到FlashMap;
    • Object getAsyncResult()/Object getAsyncResult(long timeout):得到异步执行的结果;

XMind: ZEN - Trial Version

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值