10、SpringBoot_测试用例

四、测试用例

1.准备工作

  • 添加依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
    
  • 写mapper

    @Mapper
    @Repository
    public interface ItemMapper {@Insert("insert into item(name,remark) value(#{name},#{remark})")boolean insert(Item item);@Select("select * from item where id = #{id}")public Item getById(Long id);}
    
  • 写接口

    @RestController
    @RequestMapping("/item")
    @Slf4j
    public class ItemController {@AutowiredItemMapper mapper;@GetMapping("/{id}")public Item getById(@PathVariable Long id){return mapper.getById(id);}@PostMappingpublic boolean save(@RequestBody Item item){log.info("获取方法的入参为:{}",item);return mapper.insert(item);}}
    
  • 写 domain

    @Data
    public class Item {private Long id;private String name;private String remark;
    }
    
  • 提供配置文件

    spring:datasource:druid:url: jdbc:mysql://localhost:3306/springboot_ssmusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
    

2.Web环境模拟测试

2.1目前存在的问题

  • 实际测试没有走mvcweb环境,是直接调用接口的

    @SpringBootTest
    class SpringbootTestApplicationTests {@AutowiredItemController controller;@Testpublic void testSave(){Item item = new Item();item.setName("键盘");item.setRemark("1000元");controller.save(item);}
    }
    
  • 数据是实际添加到数据库的,应该回滚

  • 缺乏实际返回值的对比

2.2模拟web环境测试

  • 添加如下属性

    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    

    在这里插入图片描述

  • 开启虚拟mvc调用

    @AutoConfigureMockMvc
    
  • 测试一个请求方法

    @Testpublic void getById(@Autowired MockMvc mvc) throws Exception {// @Autowired MockMvc mvc   也可以通过设置全局变量进行注入//创建虚拟请求的MockHttpServletRequestBuilder builder =MockMvcRequestBuilders.get("/item/29");mvc.perform(builder);}
    

2.3预期结果比较

  • 对于请求结果的比对,使用andExcept方法比较

    • 比较请求状态码

      @Testpublic void getById(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求的MockHttpServletRequestBuilder builder =MockMvcRequestBuilders.get("/item/20");ResultActions actions = mvc.perform(builder);//定义请求结果的预期值ResultMatcher ok = MockMvcResultMatchers.status().isOk();actions.andExpect(ok);}
      
    • 比较实际返回值

      @Testpublic void getById(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求的MockHttpServletRequestBuilder builder =MockMvcRequestBuilders.get("/item/20");ResultActions actions = mvc.perform(builder);//定义请求结果的预期值ResultMatcher ok = MockMvcResultMatchers.status().isOk();actions.andExpect(ok);//比较你实际结果值ResultMatcher json = MockMvcResultMatchers.content().json("{\n" +"  \"id\": 20,\n" +"  \"name\": \"笔记本电脑\",\n" +"  \"remark\": \"1二手电脑只要一千块\"\n" +"}");actions.andExpect(json);}
      
      • 如果返回值和实际不匹配会提示如下错误在这里插入图片描述
    • 比较响应头

      	    @Testpublic void getByIdHeader(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求的MockHttpServletRequestBuilder builder =MockMvcRequestBuilders.get("/item/20");ResultActions actions = mvc.perform(builder);//比较响应头ResultMatcher header = MockMvcResultMatchers.header().string("Content-Type","application/json");actions.andExpect(header);}
      
    • 发起post 请求直接在 content 中添加json转字符串即可

            @Testpublic void postItemBoolean(@Autowired MockMvc mvc,@Autowired ItemTest itemTest) throws Exception {Item item = new Item();item.setName("键盘111");item.setRemark("1000元1111");System.out.println("==================");System.out.println(itemTest);//创建虚拟请求的MockHttpServletRequestBuilder builder =MockMvcRequestBuilders.post("/item");builder.contentType("application/json");builder.accept(MediaType.APPLICATION_JSON);ObjectMapper objectMapper = new ObjectMapper();String s = objectMapper.writeValueAsString(itemTest);builder.content(s);ResultActions actions = mvc.perform(builder);MvcResult mvcResult = actions.andReturn();System.out.println(mvcResult.getResponse().getStatus());ResultMatcher ret = MockMvcResultMatchers.content().string("true");actions.andExpect(ret);}
      

2.4.测试用例数据设定###

  • 直接提供配置即可

    testcase:item:name: ${random.int(5)}remark: ${random.int(5)}
    
  • domain

    @ConfigurationProperties(prefix = "testcase.item")
    @Component
    @Data
    public class ItemTest {private String name;private String remark;
    }
    

2.5数据层测试回滚

  • 使用注解 rollback + Transactional

    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    //开启虚拟mvc的调用
    @AutoConfigureMockMvc
    @Rollback
    @Transactional
    class SpringbootTestApplicationTests {
    }
    
  • 开启事务和回滚之后,数据就不会写入数据库了。

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

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

相关文章

RabbitMQ详细使用

工作队列 注意事项&#xff1a;一个消息只能被处理一次&#xff0c;不可以处理多次 轮询分发信息 消息应答 消费者在接收到消息并且处理该消息之后&#xff0c;告诉rabbitmq它已经处理了&#xff0c;rabbitmq可以把该消息删除了。倘若mq没有收到应答&#xff0c;mq会将消息转…

uniapp上echarts地图钻取

1: 预期效果 通过切换地图 , 实现地图的钻取效果 2: 实现原理以及核心方法/参数 一开始是想利用更换地图数据的形式进行地图钻取 , 这就意味着我们需要准备全国30多个省份的地图数据 , 由于一开始考虑需要适配小程序端 , 如此多的地图文件增加了程序的体积 , 如果使用接口调…

ubuntu22.04 电脑声音和腾讯会议等声音很小怎么修复

电脑的声音很小&#xff0c;特别是开微信会议的时候几乎听不到声音&#xff0c;而声音设置都已经设置为最大 这时候就是用命令 alsamixer腾讯会议的声音 调整这两个声音的大小即可 H键弹出帮助菜单 F6按键选择声卡 左右按键选择轨道 M键静音所选轨道 上下按键调整音量…

【数据结构】二叉树--链式结构的实现 (遍历)

目录 一 二叉树的遍历 1 构建一个二叉树 2 前序遍历 3 中序遍历 4 后续遍历 5 层序 6 二叉树销毁 二 应用(递归思想) 1 二叉树节点个数 2 叶子节点个数 3 第K层的节点个数 4 二叉树查找值为x的节点 5 判断是否是二叉树 一 二叉树的遍历 学习二叉树结构&#xff0…

HQChart支持的画图工具列表

HQChart支持的画图工具列表 线段类线段射线标价线垂直线箭头趋势线水平线水平线段平行射线平行线平行通道价格通道线M头W底头肩型波浪尺AB波浪尺箱型线涂鸦线段 图形类圆弧线矩形平行四边形三角形圆对称角度 文字类文本箭头NoteAnchoredTextPriceLabelPriceNote 其他江恩角度线…

Linux:redis集群(3.*版本 和 5.*版本)搭建方法

介绍 至少6个实例才能组成集群。3主3从会自动分配 Redis集群原理 Redis集群架构 Redis Cluster采用虚拟槽分区&#xff0c;将所有的数据根据算法映射到0~16383整数槽内 Redis Cluster是一个无中心的结构 每个节点都保存数据和整个集群的状态 集群角色 Master&#xff1a;Master…

YOLOv7改进策略:RIFormerBlock助力检测|CVPR2023 RIFormer:无需TokenMixer也能达成SOTA性能的极简ViT架构

💡💡💡本文属于原创独家改进: 稀疏重参数RIFormerBlock模型引入YOLOv7进行创新性 RIFormerBlock | 亲测在多个数据集实现涨点; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLOv7自研创新结合,轻松…

Arduino安装esp32-cam以及CameraWebServer实例的实现

目录 1. 硬件2. 软件2.1 arduino下载安装2.2 arduino配置esp32-cam开发板文件2.3 下载相应版本的esp32 3. ESP32-CAM实例&#xff1a;CameraWebServer3.1 选择开发板3.2 选择示例代码进行验证3.3 烧录进行实测 1. 硬件 没买下载主板的可使用usb转串口模块进行烧录&#xff0c;接…

小程序:下拉刷新+上拉加载+自定义导航栏

下拉刷新 &#xff1a; <scroll-view scroll-y"true" 允许纵向滚动 refresher-enabled"true" 开启自定义下拉刷新 默认为false :refresher-triggered&quo…

iOS 获取模拟器沙盒路径

xcrun simctl get_app_container booted Bundle Identifier data

WorkPlus定制化的局域网会议软件,提供安全稳定的会议体验

在现代商业环境中&#xff0c;迅速而高效的沟通是企业成功的关键要素之一。而在传统的会议模式下&#xff0c;时间成本和地理限制往往给企业带来不小的困扰。针对这一问题&#xff0c;WorkPlus推出了一款创新的局域网会议软件——WorkPlus Meet&#xff0c;旨在为企业创造高效的…

数据集笔记:分析OpenCellID 不同radio/ create_time update_time可视化

1 读取数据 &#xff08;以新加坡的cellID为例&#xff09; import geopandas as gpd import pandas as pdopencellidpd.read_csv(OpenCellID_SG.csv,headerNone,names[radio,mcc,net,area,cell,unit,lon,lat,range,samples,changeable1,created1,updated,AveSignal]) opence…

【数据库问题】删除数据库失败,提示:there is 1 other session using the database

删除数据库失败&#xff0c;提示&#xff1a;there is 1 other session using the database 解决办法&#xff1a; SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datnametest_database AND pid<>pg_backend_pid(); 使用上述命令先关…

wireshark抓rtp包,提取出H265裸流数

调试rtsp收发流时&#xff0c;经常会需要抓包以确认是网络问题还是程序问题还是其它问题。通过tcpdump或者wireshark抓到的包通常是rtp流&#xff0c;保存为.pcap格式文件后中&#xff0c;可通过wireshark进行解析&#xff0c;得出h264裸流&#xff0c;并保存为文件。 1.wires…

淘宝天猫商品评论数据接口,淘宝天猫商品评论API接口,淘宝API

淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL&#xff0c;可以向淘宝服务器发起HTTP请求&#xff0c;获取商品评论数据。接口返回的数据一般为JSON格式&#xff0c;包含了商品的各种评价信息。获取到商品评论数据后&#xff0c;可以对其进行处理…

stm32 hal库 st7789 1.54寸lcd

文章目录 前言一、软件spi1.cubemx配置2.源码文件 二、硬件spi1.cubemx配置2.源码文件3.小小修改 总结 前言 1.54寸lcd 240*240 一、软件spi 1.cubemx配置 一定要注意把这几个东西上拉。 使用c8 2.源码文件 我使用的是中景园的源码&#xff0c;他本来是是标准库的稍微修改…

docker入门加实战—docker常见命令

docker入门加实战—docker常见命令 在介绍命令之前&#xff0c;先用一副图形象的展示一下docker的命令&#xff1a; 常见命令 docker的常见命令和文档地址如下表&#xff1a; 命令说明文档地址docker pull拉取镜像docker pulldocker push推送镜像到DockerRegistrydocker pus…

模拟pdf运行js脚本触发xss攻击及防攻击

一、引入pdfbox依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>3.0.0</version> </dependency> 二、生成一个带js脚本的pdf文件 //Creating PDF document object PDDocum…

JMeter接口测试:简单到离谱(只需Python和几行代码)

JMeter是一款开源的负载测试工具&#xff0c;可以进行各种类型的性能和功能测试&#xff0c;其中包括接口测试。本文将介绍如何使用Python语言利用JMeter进行接口测试&#xff0c;并提供一些实用的技巧和最佳实践。 同时&#xff0c;我也准备了一份软件测试视频教程&#xff0…

【【萌新的SOC学习之GPIO之MIO控制LED实验程序设计】】

萌新的SOC学习之GPIO之MIO控制LED实验程序设计 如何设置完GPIO并且传递数据 我们先了解GPIO引脚的配置 每一个GPIO引脚都可以设置成输入输出 &#xff0c;只有GPIO8 7 只能作为输出 我们现在做一个例子 GPIO 的bank我们知道有4个 bank0 1 2 3 DIRM_0 就是第一个bank 需要写入…