MockMvc

2023-10-31

MockMvc

//classes = {SpringbootApplication.class}指定入口启动类
//webEnvironment = SpringBootTest.webEnvironment.RANDOM_PORT采用随机端口启动,不会产生端口占用问题
@SpringBootTest(classes = {SpringbootApplication.class},webEnvironment = SpringBootTest.webEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class MockMvcTestor{
	//利用@Resource注入MockMvc对象
	@Resource
	private MockMvc mockMvc ;
	@Test
	@DisplayName("文本响应测试用例")
	public void testMock1() throws Exception{
		//利用perform构建请求
		//MockMvcRequestBuilders请求的构建器
		//MockMvcRequestBuilders.get()
		//MockMvcRequestBuilders.post()
		MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/logger"))
			.andExpect(MockMvcResultMatchers.status().isOk()) //MockMvcResultMatchers结果匹配器    预期
			.andDo(MockMvcResultHandlers.print()) //预期符合   MockMvcResultHandlers
			.andExpect(MockMvcResultMatchers.content().string("SUCCESS"))
			.andReturn() ;//真正的发送请求,执行
	}
	@Test
	@DisplayName("JSON响应测试用例")
	public void testMock2() throws Exception{
		mockMvc.perform(MockMvcRequestBuilders.get("/getHeader")
			.header("token","abcdw") //设置请求头  header("请求头名字","对应的值")
			.param("id","772") //请求参数设置
			).andExpect(MockMvcResultMatchers.ststus().isOk())
			.andDo(MockMvcResultHandlers.print())
			.andExpect(MockMvcResultMatchers.jsonPath("access_token").value("abcdw"))
			.andReturn()
	}
}
 public void getAllCategoryTest() throws Exception {
        String responseString = mockMvc.perform(
                get("/categories/getAllCategory")    //请求的url,请求的方法是get
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED)  //数据的格式
               .param("pcode","root")         //添加参数
        ).andExpect(status().isOk()    //返回的状态是200
     //   .andExpect(jsonPath('$.status').value('success')
                ).andDo(print())         //打印出请求和相应的内容
                .andReturn().getResponse().getContentAsString();   //将相应的数据转换为字符串
        System.out.println("--------返回的json = " + responseString);
    }

1、注解

(1)@RunWith注解

  • 指定测试运行器,例如使用 SpringJUnit4ClassRunner.class

(2)@ContextConfiguration注解

  • 执行要加载的配置文件,例如 classpath:application.xml 或 file:src/main/resources/DispatcherServlet-servlet.xml

(3)@WebAppConfiguration注解

  • 用于声明测试时所加载的是WebApplicationContext【WebMVC的 XmlWebApplicationContext 是其实现类】

⑷ WebApplicationContext

  • WebMVC的IOC容器对象,需要声明并通过@Autowired自动装配进来

(5) 事务回滚

 @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
 @Transactional
  • 配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用
  • 为什么要事务回滚?
    • 测试过程对数据库的操作,会产生脏数据,影响我们数据的正确性
    • 不方便循环测试,即假如这次我们将一个记录删除了,下次就无法再进行这个Junit测试了,因为该记录已经删除,将会报错。
    • 如果不使用事务回滚,我们需要在代码中显式的对我们的增删改数据库操作进行恢复,将多很多和测试无关的代码

2、核心方法

(1) perform

MocMvc.perform(get/post(接口).header("token",token).contentType(MediaType.APPLICATION_JSON).params("pcode","root"))
  • perform(RequestBuilder requestBuilder ):执行一个RequestBuilder请,会自动执行SpringMVC的流程并映射到相应的控制器执行处理,该方法的返回值是一个ResultActions。
    • get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object… urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。
    • header:带上头文件token
    • contentType:数据类型。
    • params:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式。

(2) ResultActions

  • andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确(对返回的数据进行的判断)。
  • andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判断)。
  • andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

(3)初始化MockMvc对象

	@Before
    public void setUp() {
    	//此种方式可通过spring上下文来自动配置一个或多个controller
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MockMvc 的相关文章

随机推荐

  • sqoop报错ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Query

    一 详细报错 ERROR tool ImportTool Encountered IOException running import job java io IOException Query select id login name f
  • 全球最火的R工具包一网打尽,超过300+工具,立马收藏!

    虽然很早就知道R被微软收购 也很早知道R在统计分析处理方面很强大 开始一直没有行动过 直到 直到12月初在微软技术大会 看到我软的工程师演示R的使用 我就震惊了 然后最近在网上到处了解和爬一些R的资料 看着看着就入迷了 这就是个大宝库了 以
  • fastadmin如何实现关联表查询

    这里需对表fa setting employees进行关联 yewu为本表字段 employee num为fa setting employees的字段 通过yewu与employee num进行关联 需要查询fa setting empl
  • JS的运算

    一JavaScript的算数运算符 加 var c a b console log c 13 减 console log a b 7 乘 console log a b 30 除 console log a b 3 333333333333
  • STL——list容器

    include
  • GD32F4XX SPI DMA容易被中断打断导致传输异常问题

    主要注意点在 2 dma触发spi传输函数 部分 如下图加入这个后就稳定了 1 初始化代码 void spi4 dma config void dma single data parameter struct dma init struct
  • centos 7 安装 RabbitMQ

    1 更新 yum 仓库 yum y update 2 安装Erlang yum y install epel release 查看安装的版本 erl version 3 下载安装 rabbitMQ wget content disposit
  • 投影时出现错误ERROR 999999: Error executing function.

    shapefile文件mtroads shp投影在NAD 1983 State Plane Montana FIPS 2500坐标系统 线单位为米 但没有投影文件 这时 如果要用define prijection定义mtroads shp时
  • JAVA微信小程序支付源码

    做了很多次都没整理 总以为脑子记住了 可当下次用的时候又跟个脑瘫孩儿一样 今天就记录一下部分代码 需要帮助加QQ 1137586868 首先解释一下微信的签名制作方式 这里可能让小白最头疼的了 统一下单和支付时要的签名制作方式也都不一样 我
  • 卸载cpu版本的torch并离线安装对应的gpu版本

    每次从github上安装项目对应的库 利用requirements txt安装很容易出现版本不对应的情况 尤其是将torch的gpu版本安装成cpu 这里记录一些查看版本的指令和离线安装的方法 就不用每次百度啦 注 其他库的离线安装也可以用
  • stm32不使用外部晶振管脚怎么处理_stm32的外部晶振不起振以及更改外部晶振值的问题...

    今天有人问我关于外部晶振不起振以及如歌更改32的外部晶振 在此我做一个简单的记录 以stm32f1系列为例 其余类似 1 晶振不起振 此次遇到的问题倒不是出在电路上 实际上还是软件上的问题 画的新板子 换了一块贴片的晶振 与原来的直插式有点
  • Linux (二): 文件系统介绍、文件处理与权限操作

    目录 四 文件系统 分区与文件系统 组成 文件读取 磁盘碎片 block inode 目录 日志 挂载 目录配置 五 文件 文件属性 文件与目录的基本操作 1 ls 2 cd 3 mkdir 4 rmdir 5 touch 6 cp 7 r
  • Flink 1.17教程:输出算子之输出到Kafka

    输出到Kafka 1 添加Kafka 连接器依赖 由于我们已经测试过从Kafka数据源读取数据 连接器相关依赖已经引入 这里就不重复介绍了 2 启动Kafka集群 3 编写输出到Kafka的示例代码 输出无key的record public
  • word2vec和常见CNN+RNN网格结构组成的文本分类模型

    作者为了应付毕业 所以在补充深度学习相关知识 这是我尝试把word2vec和深度学习相互结合的一次记录 数据集来源 数据集预处理 生成word2vec模型 搭建网络并且训练 数据集来源 本文的数据集源自kaggle比赛中的NLP入门比赛 灾
  • S3C2416 SD卡启动和NAND启动的配置

    S3C2416的启动方式分为IROM NAND ONENAND ROM三种模式 有的datasheet上只有IROM ONENAND ROM两种模式 如下图所示 图1 图2 图2应该是早期三星的2416手册 图1为之后再次更新的 所以这里以
  • R语言实验课(生信)(附代码)

    实验五 题目1 解决方法 a lt read table E R Rcode temp txt 读取txt文件 找到下载路径 b lt list c lt list d lt list e lt list h lt matrix 0 5 1
  • 云风的新书电子版出来的真快

    云风大侠新书出来没几天 电子版就出来了 电骡上好像很早就有下载的了 不过我认为电子版不会影响销售的 只会聚集更多的人气 我这里也有个链接 ftp pub pub ftp PicDisk net pub Scan 游戏之旅 我的编程感悟 pd
  • 关于2022年9月以太坊合并你需要知道的10件事

    关于2022年9月以太坊合并你需要知道的10件事 1 什么是合并 合并是以太坊区块链将共识机制从工作量证明 pow 转为权益证明 pos 的事件 是以太坊主网与信标链 beacon chain 合并的简称 2 为什么 合并 这么值得关注 在
  • MicroBlaze系列教程(5):AXI_UART16550的使用

    文章目录 toc AXI UART16550简介 MicroBlaze硬件配置 常用函数 使用示例 参考资料 工程下载 本文是Xilinx MicroBlaze系列教程的第5篇文章 AXI UART16550简介 axi uart16550
  • MockMvc

    MockMvc classes SpringbootApplication class 指定入口启动类 webEnvironment SpringBootTest webEnvironment RANDOM PORT采用随机端口启动 不会产