美文网首页
Mock测试

Mock测试

作者: 久伴我还是酒伴我 | 来源:发表于2021-06-30 15:09 被阅读0次

简介

SpringMVC单元测试的独立测试;对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,所以为了可以对Controller进行测试,我们引入MockMVC。

MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

MockMvc

★ 服务器端SpringMVC测试的主入口点。
★ 通过MockMVCBuilders建造者的静态方法去建造MockMVCBuilder,MockMvc由MockMVCBuilder构造。
★ 核心方法:perform(RequestBuilder rb),执行一个RequestBuilder请,会自动执行SpringMVC的流程并映射到相应的控制器执行处理,该方法的返回值是一个ResultActions

MockMVCBuilder

★ MockMVCBuilder是使用构造者模式来构造MockMvc的构造器。
★ 主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder。
★ 可以直接使用静态工厂MockMvcBuilders创建即可,不需要直接使用上面两个实现类。

MockMVCBuilders

★ 负责创建MockMVCBuilder对象。
两种创建方式

  1. standaloneSetup: 通过参数指定一组控制器,这样就不需要从上下文获取了。
  2. webAppContextSetup:指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的MockMvc。

MockMvcRequestBuilders

★ 用来构建Request请求的,其主要有两个子类。
★ MockHttpServletRequestBuilder和MockMultipartHttpServletRequestBuilder(如文件上传使用),即用来Mock客户端请求需要的所有数据。

ResultActions

★ MockMvc.perform后将得到ResultActions
★ andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确。
★ andDo:添加ResultHandler结果处理器,如调试时打印结果到控制台。
★ andReturn:最后返回相应的MvcResult;然后进行自定义验证或下一步的异步处理。
★ MockMvcResultMatchers
用来匹配执行完请求后的**结果验证。
果匹配失败将抛出相应的异常。
包含了很多验证API方法。
★ MockMvcResultHandlers 结果处理器,表示要对结果做处理的需要用到。

具体代码

package com.yutian.machine.cat;

import com.alibaba.fastjson.JSON;
import com.yutian.machine.cat.biz.order.dto.request.OrderRequest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

/**
 * @author leijie.gao
 * @version 1.0.0
 * @ClassName BaseControllerTest.java
 * @Description TODO
 * @createTime 2021年06月30日 14:01:00
 */
@SpringBootTest(classes = MachineCatApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class BaseControllerTest {
    private MockMvc mockMvc;
    @Autowired
    private WebApplicationContext context;

    @Before
    public void setUp(){
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void testCpbCollect() throws Exception{
        HttpHeaders headers = new HttpHeaders();
        headers.add("kxl-company-tax-no","91610104724923046E");
        headers.add("kxl-system-version","4.0.10");
        headers.add("kxl-state-tax-url","https://fpdk.shaanxi.chinatax.gov.cn/");
        headers.add("kxl-ip","192.192.3.12");
        headers.add("kxl-rsa","rsa39");
        headers.add("kxl-token","93392-3002-30302302302-302-3032-0322");

        // 参数
        OrderRequest request = new OrderRequest();
        request.setCity("河南省");
        request.setCompanyName("dkjfdjkfd");
        request.setNum(12);
        request.setOrderName("HG-9292020002");

        RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/invoice/selection/cpbInvoiceCollect")
                .contentType(MediaType.APPLICATION_JSON_VALUE).content(JSON.toJSONString(request))
                .headers(headers);
        MvcResult mvcResult = mockMvc.perform(requestBuilder).andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
        String resContent = mvcResult.getResponse().getContentAsString();

        Assert.assertNotNull(resContent);
    }
}

相关文章

  • 2020-01-31

    Pytest-Mock 进阶用法详解 一、什么是 Mock 测试? Mock测试就是在 测试过程 中,对于某些...

  • 接口测试Mock与HttpClient

    1.Mock框架 1.1mock介绍: mock可以模拟接口测试,通过运行mock框架的jar,快速搭建接口测试。...

  • 软测扩充

    一、 mock 1. 什么是mock? ①测试桩:模拟被测对象的返回,用于测试②mock:通常指mock serv...

  • [PPJ_21] Mock工具Json Server安装、入门操

    目录结构 一、关于Mock 1.Mock简介 Mock:“模拟”的含义。Mock测试,指在测试过程中,对于某些不容...

  • (转)Moq测试基础说谈(一)——简介,下载

    Moq,就是Mock you。读音可以读成Mock~you。是Mock框架的一种。用于测试中的Mock测试。Moc...

  • JAVA-Mock测试框架简记-2017-2-7 18:38:3

    JAVA-常用Mock测试框架 EasyMock 早期比较流行的MocK测试框架 mockito EasyMock...

  • Mockito的使用

    Mockito的使用 1,Mockito的介绍 1.1 什么是mock测试? Mock测试就在测试过程中,对于某些...

  • python中常用的mock介绍

    mock (Python 标准库) 一个用于伪造测试的库 使用 被测试的类 用mock测试 HTTPretty P...

  • mock介绍

    mock (Python 标准库) 一个用于伪造测试的库 使用 被测试的类 用mock测试 HTTPretty P...

  • json-server学习笔记

    1.简介 json-server是一款小巧的Mock工具 Mock:模拟 Mock测试:在测试过程中,对于不容易构...

网友评论

      本文标题:Mock测试

      本文链接:https://www.haomeiwen.com/subject/wrsrultx.html