zoukankan      html  css  js  c++  java
  • Spring Boot 使用MockMvc对象模拟调用Controller

      功能实现之后,我们要养成随手写配套单元测试的习惯,这在微服务架构中尤为重要。通常,我们实施微服务架构的时候,已经实现了前后端分离的项目与架构部署。那么在实现后端服务的时候,单元测试是在开发过程中用来验证代码正确性非常好的手段,并且这些单元测试将会很好地支持我们未来可能会进行的重构。

      编写controller

    package com.xc.springboot.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
    
        /**
         * http://127.0.0.1:8081/hello
         */
        @RequestMapping("/hello")
        public String hello() {
            return "hello world!";
        }
    
    }

      src/test/下编写测试类

    package com.xc.springboot.controller;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.http.MediaType;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    
    //引入下面的静态引用,让status、content、equalTo函数可用
    import static org.hamcrest.Matchers.equalTo;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    
    @RunWith(SpringJUnit4ClassRunner.class)//引入Spring对JUnit4的支持。
    // @SpringApplicationConfiguration(classes = SpringbootApplication.class)//指定Spring Boot的启动类。
    @WebAppConfiguration//开启Web应用的配置,用于模拟ServletContext。
    public class HelloControllerTest {
    
        private MockMvc mvc;
    
        //·@Before:JUnit中定义在测试用例@Test内容执行前预加载的内容,这里用来初始化对HelloController的模拟。
        @Before
        public void setUp() throws Exception {
            mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
        }
    
        @Test
        public void hello() throws Exception {
    
            //·MockMvc对象:用于模拟调用Controller的接口发起请求,在@Test定义的hello测试用例中,perform函数执行一次请求调用,accept用于执行接收的数据类型,andExpect用于判断接口返回的期望值。
            mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk())
                    .andExpect(content().string(equalTo("hello world!")));
        }
    
    
    }

      代码解析如下。

      ·@RunWith(SpringJUnit4ClassRunner.class):引入Spring对JUnit4的支持。

      ·@SpringApplicationConfiguration(classes =SpringbootApplication.class):指定Spring Boot的启动类。

      ·@WebAppConfiguration:开启Web应用的配置,用于模拟ServletContext。

      ·MockMvc对象:用于模拟调用Controller的接口发起请求,在@Test定义的hello测试用例中,perform函数执行一次请求调用,accept用于执行接收的数据类型,andExpect用于判断接口返回的期望值。

      ·@Before:JUnit中定义在测试用例@Test内容执行前预加载的内容,这里用来初始化对HelloController的模拟。

      注意引入下面的静态引用,让status、content、equalTo函数可用:

    import static org.hamcrest.Matchers.equalTo;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

    版本:spring-boot-starter-parent 1.5.21.RELEASE

    参考:Spring Cloud微服务实战 p51

  • 相关阅读:
    软件开发过程中应当遵守的原则
    企业架构是什么?
    软件工程的精髓
    PHP获取自然周列表,周开始结束日期,月开始结束时间方法类
    JS替换textarea里的回车换行
    PHP连接PGSQL
    PT与PX的区别
    JQuery 翻页小记
    PHP中替换textarea时的回车换行
    HTML5 CanvasOreilly.Canvas.Pocket.Reference (4)
  • 原文地址:https://www.cnblogs.com/ooo0/p/11220458.html
Copyright © 2011-2022 走看看