• MockMvc模拟对controller进行单元测试


    本文为博主原创,未经允许不得转载:

     MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,

    而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

    MockMvc用到的注解 :

    @RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test组件进行单元测试;

    @ContextConfiguration: 配置文件路径,用于加载和初始化spring 环境,

    如果有多个配置文件,可以将括号中的信息配置为一个字符串数组来表示;


    ---也可通过注解进行事务配置//配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用

    @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)

    @Transactional

    以下为项目中用到的MockMvc进行单元测试的方法,

    ---spring-dal-test.xml该文件为数据库配置bean的配置以及事务回滚配置的文件

    ---spring-service-test.xml该文件为项目中依赖的资源配置初始化加载文件

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = { "classpath:conf/spring/spring-dal-test.xml",
            "classpath:conf/spring/spring-service-test.xml" })
    public class AdminUserManageControllerTest {
    
        @Autowired
        private AdminUserManageController adminUserManageController;
    
        private MockMvc mockMvc;
    
        @Before
        public void setup() {
            // 初始化构建
            mockMvc = MockMvcBuilders.standaloneSetup(adminUserManageController).build();
        }
    
        @Test
        public void queryAdminUserByPageTest001() throws Exception {
            // 分页查询用户信息
            mockMvc.perform(   //执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
                post("/adminUserManage/queryAdminUserByPage")  //模拟请求的url,及请求的方法是post
                .content("{"pageNum":1,"pageSize":20}"))   //请求的参数体
                    .andExpect(
                        status().isOk()    //预期返回的状态码是200
                        )
                        .andReturn().getResponse().getContentAsString();  //将相应的数据转换为字符串
        }
    }    

     常用方法总结:

    perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
    get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。
    param:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式,可见后面被@ResponseBody注解参数的解决方法
    andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确(对返回的数据进行的判断);
    andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判断);
    andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

  • 相关阅读:
    阿里双11,如何实现每秒几十万的高并发写入
    记住:永远不要在 MySQL 中使用 UTF-8
    史上最烂的项目:苦撑 12 年,600 多万行代码
    除了不要 SELECT * ,使用数据库还应知道的11个技巧!
    厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
    请停止学习框架
    基于 MySQL 主从模式搭建上万并发的系统架构
    JS获取节点
    JS函数
    JS
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/10725713.html
Copyright © 2020-2023  润新知