欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MockMvc详解

程序员文章站 2024-03-21 15:11:22
...

目录

 

 


在网上看到的一个简单的Demo

Spring Boot系列(一):Spring Boot 入门篇

控制层Controller:

@RestController
public class HelloWorldController {
    @RequestMapping("/hello")
    public String index() {
        return "Hello World";
    }
}

test包中

MockMvc详解


test类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MockServletContext.class)
@WebAppConfiguration
public class HelloWorldControllerTests {
    private MockMvc mvc;
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
    }
    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }

}

运行测试代码的运行结果如下:

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /hello
       Parameters = {}
          Headers = [Accept:"application/json"]
             Body = <no character encoding set>
    Session Attrs = {}

Handler:
             Type = com.example.demo.controller.HelloWorldController
           Method = com.example.demo.controller.HelloWorldController#index()

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"application/json", Content-Length:"11"]
     Content type = application/json
             Body = Hello World
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

MockMvc知识点

MockMvc详解

一、简介
为何使用MockMvc?
        对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,所以为了可以对Controller进行测试,我们引入了MockMVC。
        MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

二、测试逻辑

MockMvcBuilder构造MockMvc的构造器;

mockMvc调用perform,执行一个RequestBuilder请求,调用controller的业务处理逻辑;

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

使用StatusResultMatchers对请求结果进行验证;

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

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

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

ResultActions.andDo:添加一个结果处理器,比如此处使用.andDo(MockMvcResultHandlers.print())输出整个响应结果信息,可以在调试的时候使用。

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

相关标签: 学习资料