SpringBoot测试类编写

news2024/10/7 8:21:36

前置要求:

a.测试类上需要的注解

@SpringBootTest
@AutoConfigureMockMvc
@Slf4j

 b.引入MockMvc类

@Autowired
private MockMvc mockMvc;

c.如果需要前置条件可以用before注解

 

        1.get/delete请求

    // 查询
    @Test
    void testQuery() throws Exception {
        String content = mockMvc.perform(get("/api/v1/test/list") // 查询请求地址
                .param("param1", "...") // 参数(可以多个,如下)
                .param("param2", "...")
                .header("Authorization", "Bearer " + token) // 增加header参数
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk()) // 查询为成功状态才会运行后续方法(.andReturn().getResponse().getContentAsString())
                .andReturn().getResponse() // 获取返回数据(封装的全数据)
                .getContentAsString(); // 获取返回的的content,就是String结果集
        // 格式化打印查询结果
        log.info("content:{}", JSONUtil.parse(content).toStringPretty());
    }


    // 删除
    @Test
    void testDelete() throws Exception {
        String id = "xxxxxxx";
        String content = mockMvc.perform(delete("/api/v1/test/"+ id) // 查询请求地址
                .header("Authorization", "Bearer " + token) // 增加header参数
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk()) // 查询为成功状态才会运行后续方法(.andReturn().getResponse().getContentAsString())
                .andReturn().getResponse() // 获取返回数据(封装的全数据)
                .getContentAsString(); // 获取返回的的content,就是String结果集
        // 格式化打印查询结果
        log.info("content:{}", JSONUtil.parse(content).toStringPretty());
    }

        

方法解析:

  • 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;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

2.post请求

        注意要标注传参类型(.contentType(MediaType.APPLICATION_JSON) 

    /**
     * 新增
     *
     * @Throws Exception
     */
    @Test
    void testSave() throws Exception {
        /**
         * java代码为这样的接口:
         * @Operation(description = "保存", summary = "保存")
         * @PostMapping("/record")
         * public void save(@Validated @RequestBody CheckRoomDto.SaveReqDto req) {
         *
         * }
         */
        // 构建请求 CheckRoomDto.SaveReqDto req
        CheckRoomDto.SaveReqDto req = new CheckRoomDto.SaveReqDto();
        req.setCheckRoomTime(new Date());
        mockMvc.perform(post("/api/v1/test/record/")
                .contentType(MediaType.APPLICATION_JSON) // 标注传参类型,application/json
                .content(JSONUtil.toJsonStr(req)) // 将dto转换成json格式字符串放到content里面
                .header("Authorization", "Bearer " + token)
                .accept(MediaType.APPLICATION_JSON)) // 接受的数据的数据格式
                .andExpect(status().isOk())
                .andReturn().getResponse();// 新增一般没有返回值,如果有,打印同get请求
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django(15):身份和权限认证

目录1.Django中的身份认证模块1.1 用户模型1.2 认证模块1.3 项目搭建演示2.权限管理架构2.1 权限相关数据模型2.2 权限相关功能函数2.3 权限分配函数2.4 权限设置3.资源访问管理1.Django中的身份认证模块 1.1 用户模型 Django中有内建的用户模块django.contrib.auth.models.U…

2022 CNCC 中国计算机大会参会总结

前言 第 19 届 CNCC 于2022年12月8-10日召开,本届大会为期三天,首次采取全线上举办形式,主题为“算力、数据、生态”,重点在保持多样性、聚焦热点前沿话题、平衡学术界和产业界参与等维度展开讨论。大会由CCF会士、中国科学院院士…

【SpringBoot】一文带你入门SpringBoot

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:【Spring】 🥭本文内…

【职场进阶】做好项目管理,先从明确职责开始

优秀的项目管理一定是高效协调各方资源、反馈及时、调整迅速的。 同时可以做到让参与各方在整个项目过程中张弛有序、愉快合作,最终实现产品项目的效益最大化。 那什么是项目呢? 项目是为向客户提供独特的产品或服务而进行的临时性任务,项目有…

TypeScript 对象key为number时的坑

首先在js的对象中有一个设定,就是对象的key可以是字符串,也可以是数字。 不论key是字符串还是数字,遍历对象key的时候,这个key会变成字符串 通过[] 操作符访问key对应值时候,不论是数字还是字符串都转成了 字符串的k…

Chromedriver安装教程

第一步 查看你当前Chrome浏览器的版本,如下图所示: 第二步 查看当前Chrome浏览器的版本号,如下图所示,版本 108.0.5359.125(正式版本) (64 位)中的,108就是我们的版本号。 第三…

VTK-PointPlacer

前言:本博文主要研究VTK中点转换到曲面上的应用,相关的接口为vtkPolygonalSurfacePointPlacer,为深入研究将基类vtkPointPlacer开始讲解。主要应用为在PolyData表面进行画线。 vtkPointPlacer 描述:将2D display位置转换为世界坐…

ospf知识点汇总

OSPF : 开放式最短路径优先协议使用范围:IGP 协议算法特点: 链路状态型路由协议,SPF算法协议是否传递网络掩码:传递网络掩码协议封装:基于IP协议封装,协议号为 89一.OSPF 特点1.OSPF 是一种典型…

基于javaweb(springboot+mybatis)网上酒类商城项目设计和实现以及文档报告

基于javaweb(springbootmybatis)网上酒类商城项目设计和实现以及文档报告 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏…

【Linux】Linux项目自动化构建工具—make/Makefile

目录一.什么是make/MakefileMakefilemake二.Makefile逻辑1.简单依赖2.复杂依赖三.make指令1.make的使用2.clean清理3.伪目标4.make如何确定是否编译访问时间的影响修改时间的影响一.什么是make/Makefile Makefile 在Windows下,我们使用VS、VS Code这些ide编写C/C程…

MySQL的客户端/服务器架构

以我们平时使用的微信为例,它其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。客户端可能有很多种形式,比如手机APP,电脑软件或者是网页版微信,每个客户端都有一个唯一的用户名,就…

赶紧收藏 | 50个超实用微信小程序,巨好用|||内含免费配音软件

现在App太多了,想用的功能都要下载,但是手机有258g内存不允许这么放肆呀,只能挖掘不占用存的方法了,小程序就解决了这个痛,节省内存,让手机不再卡顿,打游戏也舒服.给大家整理了50个很好用的小程…

【阶段三】Python机器学习11篇:机器学习项目实战:KNN(K近邻)回归模型

本篇的思维导图: 项目实战(KNN回归模型) K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值进行待预测样本点的回归预测。 项目背景 K近邻除了能进行分类分析,还能进行回归分析,即预测连续变量,此时的KNN称为K近邻回归模型。回归问题是一类…

synchronized 重量级锁分析

synchronized 重量级锁分析 1. 背景 在JDK1.6以前,synchronized 的工作方式都是这种重量级的锁。它的实现原理就是利用 kernel 中的互斥量,mutex。主要是内核中的mutex 能够保证它是一个互斥的量。如果线程1拿到了 mutex,那么线程2就拿不到了。这是内核帮我们保证…

二十三、Kubernetes中Pod控制器分类、ReplicaSet(RS)控制器详解

1、概述 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建的pod:kub…

小米应用商店APP侵权投诉流程

目录一、官方指引二、侵权投诉流程1.侵权投诉通知和反通知流程2.受理渠道3.权利人发起侵权通知邮件一、官方指引 https://dev.mi.com/distribute/doc/details?pId1142 二、侵权投诉流程 1.侵权投诉通知和反通知流程 2.受理渠道 对外邮箱:developerxiaomi.com …

云呐|固定资产盘点APP

如果工人想做好他们的工作,他们想做好他们的工作。目前,行政事业单位对固定资产管理进行一物一卡一码管理,根据条形码粘贴和扫码总结,是目前科学完善的总结方法,具有快速、高效、准确的特点。对于这种方法,…

5.6、TCP超时重传时间的选择

超时重传时间的选择是 TCP 最复杂的问题之一 1、超时重传时间RTO的选取 假设主机 A 给主机 B 发送 TCP 数据报文段 000,并记录下当前的时间 主机 B 收到后,给主机 A 发送相应的确认报文段 主机 A 收到确认报文段后,记录下当前的时间 那么…

为什么BI仪表板的共享功能对企业如此重要?

随着大数据的发展,企业逐渐将数据作为其决策的重要组成部分,共享商业智能 (BI) 仪表板显得越来越重要。例如,在员工之间共享BI仪表板,不仅可以做出更好的数据驱动决策,还可以更好地提高工作透明度和问责制,…

Golang时间处理容易踩坑,小心损失百万

简介 在各个语言之中都有时间类型的处理,因为这个地球是圆的(我仿佛在讲废话),有多个时区,每个时区的时间不一样,在程序中有必要存在一种方式,或者说一种类型存储时间,还可以通过一系…