SpringBoot【实用篇】- 测试

ops/2024/11/2 5:57:20/

文章目录

    • 目标:
      • 1.加载测试专用属性
      • 3.Web环境模拟测试
      • 2.加载测试专用配置
      • 4.数据层测试回滚
      • 5.测试用例数据设定

目标:

  • 加载测试专用属性
  • 加载测试专用配置
  • Web环境模拟测试
  • 数据层测试回滚
  • 测试用例数据设定
    在这里插入图片描述

1.加载测试专用属性

我们在前面讲配置高级的时候是这样写的:

test:prop: testValue

测试类:

java">@SpringBootTest
public class PropertiesAndArgsTest {@Value("${test.prop}")private String msg;@Testvoid testProperties(){System.out.println(msg);}
}

在这里插入图片描述
那如果我把yml文件中的配置注释掉,我们还可以通过@SprinBootTest 来添加临时属性

java">@SpringBootTest("test.prop = testValue")
public class PropertiesAndArgsTest {@Value("${test.prop}")private String msg;@Testvoid testProperties(){System.out.println(msg);}
}

在这里插入图片描述
如果两个都有谁生效呢? 答案是在这个测试类properties属性添加的临时属性配置中会覆盖yml的配置。
用args配也是可以的,使用args属性可以为当前测试用例添加临时的命令行参数

java">//@SpringBootTest("test.prop = testValue")
@SpringBootTest(args = {"--test.prop=testValue2"})
public class PropertiesAndArgsTest {@Value("${test.prop}")private String msg;@Testvoid testProperties(){System.out.println(msg);}
}

在这里插入图片描述
那如果三个都有呢?
在这里插入图片描述
答案: 命令行级别参数(源码级别) > properties(idea)
小结:
加载测试临时属性应用小于小范围测试环境.

3.Web环境模拟测试

如果我们要想加入一个外部的bean来辅助我们测试:

java">@Configuration
public class MsgConfig {@Beanpublic String msg(){return "bean msg";}}

测试类中:

java">@SpringBootTest
@Import(MsgConfig.class)
public class ConfigurationTest {@Autowiredprivate String msg;@Testvoid testConfiguration() {System.out.println(msg);}}

在这里插入图片描述
在这里插入图片描述

小结: 加载测试范围配置应用与小范围测试环境

能不能在测试样例中测试表现层呢?

2.加载测试专用配置

java">@SpringBootTest
public class WebTest {@Testvoid test(){}
}

ctrl+左键 =》 查看SpringBootTest的源码,ctrl + f12查看方法
在这里插入图片描述

java">@SpringBootTest(webEnvironment =SpringBootTest.WebEnvironment.RANDOM_PORT)

在这里插入图片描述

创建controller 然后模拟调用

java">@RestController
@RequestMapping("/books")
public class BookController {@GetMappingpublic String getById(){System.out.println("getById is running...");return "SpringBoot";}
}
java"> @Testvoid testWeb(@Autowired MockMvc mvc) throws Exception {//http:localhost:8080/books//创建虚拟请求 当前访问路径为/booksMockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");mvc.perform(builder);}

ctrl + 左键 进去RequestBuilder查看源码,然后ctrl+h查看实现类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

java">   @Testvoid testStatus(@Autowired MockMvc mvc) throws Exception {MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");ResultActions action = mvc.perform(builder);//设定预期值与真实值进行比较,成功测试通过,失败测试失败StatusResultMatchers status = MockMvcResultMatchers.status();//预计本次调用时成功的:状态200ResultMatcher ok = status.isOk();//添加预计值到本次调用过程中进行匹配action.andExpect(ok);}

如果你修改为book1
在这里插入图片描述
在这里插入图片描述
执行结果的匹配

java"> @Testvoid testBody(@Autowired MockMvc mvc) throws Exception {MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");ResultActions action = mvc.perform(builder);//设定预期值与真实值进行比较,成功测试通过,失败测试失败ContentResultMatchers content = MockMvcResultMatchers.content();ResultMatcher result = content.string("springboot");action.andExpect(result);}

在这里插入图片描述

但是我们以后是对json做匹配

java">import lombok.Data;@Data
public class Book {private int id;private String name;private String type;private String description;
}
java"> @GetMappingpublic Book getById(){System.out.println("getById is running...");Book book = new Book();book.setId(1);book.setName("SpringBoot");book.setType("Spring Framework");book.setDescription("This is a book about Spring Boot");return book;}

在这里插入图片描述

java"> @Testvoid testJson(@Autowired MockMvc mvc) throws Exception {MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");ResultActions action = mvc.perform(builder);//设定预期值与真实值进行比较,成功测试通过,失败测试失败ContentResultMatchers content = MockMvcResultMatchers.content();ResultMatcher result = content.json("{\n" +"    \"id\": 1,\n" +"    \"name\": \"SpringBoot\",\n" +"    \"type\": \"Spring Framework\",\n" +"    \"description\": \"This is a book about Spring Boot\"\n" +"}");action.andExpect(result);}

我们也可以测试header-type 虚拟请求头匹配

java">  @Testvoid testContentType(@Autowired MockMvc mvc) throws Exception {MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");ResultActions action = mvc.perform(builder);//设定预期值与真实值进行比较,成功测试通过,失败测试失败HeaderResultMatchers header = MockMvcResultMatchers.header();ResultMatcher contentType = header.string("Content-Type", "application/json;charset=UTF-8");action.andExpect(contentType);}

在这里插入图片描述

4.数据层测试回滚

有一种情况是:当我们测试业务层或者Dao层会留下结果数据,真实的企业开发会生成两个sql文件一个数据库的表创建的sql,一个数据库初始化的sql,但是当我们在开发的时候仍然需要测试仍然会留下数据,但是我们是想着我们测试只是想看看写的代码有没有问题,不需要留下数据,下面说的方法只服务于开发,上线后的另说。

我们可以用事务来进行回滚,

在这里插入图片描述
如何生成随机值来进行测试呢?

5.测试用例数据设定

在这里插入图片描述
在这里插入图片描述
封装实体类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小结: 使用随机数据替换固定数据。


http://www.ppmy.cn/ops/130342.html

相关文章

Reactor模型

Reactor模型 引言 ​ ​ 概念: Reactor模型:又称为反应堆模型,它是一种基于事件驱动和I/O多路复用的设计模式,常用于处理大量并发I/O事件,是一个高性能模型,它通过事件驱动的方式,高效地管…

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成! 磁盘分区 开始分区: mkpart data_mysql # 分区名&…

django图书管理系统-计算机毕业设计源码00648

摘要 图书管理系统在数字化阅读趋势、图书馆自动化管理、用户体验需求和信息技术应用等方面具有重要的研究意义。图书馆自动化管理系统的引入和应用提高了图书借阅过程的效率和准确性,减少了对手工操作和纸质记录的需求。用户对系统的易用性、查询速度、借还流程有更…

配置python环境

下载Anaconda 下载Python winR 输入cmd启动命令提示符 pip换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple确认已经换源 pip config list打开Anaconda Prompt conda换源 conda config --add channels https://mirrors.tuna.tsinghua.edu.c…

ceph补充介绍

SDS-ceph ceph介绍 crushmap 1、crush算法通过计算数据存储位置来确定如何存储和检索,授权客户端直接连接osd 2、对象通过算法被切分成数据片,分布在不同的osd上 3、提供很多种的bucket,最小的节点是osd # 结构 osd (or device) host #主…

【TextIn:开源免费的AI智能文字识别产品(通用文档智能解析识别、OCR识别、文档格式转换、篡改检测、证件识别等)】

TextIn:开源免费的AI智能文字识别产品(通用文档智能解析识别、OCR识别、文档格式转换、篡改检测、证件识别等) 产品的官网:TextIn官网 希望感兴趣以及有需求的小伙伴们多多了解,因为这篇文章也是源于管网介绍才产出的…

使用Django REST framework构建RESTful API

使用Django REST framework构建RESTful API Django REST framework简介 安装Django REST framework 创建Django项目 创建Django应用 配置Django项目 创建模型 迁移数据库 创建序列化器 创建视图 配置URL 配置全局URL 配置认证和权限 测试API 使用Postman测试API 分页 过滤和排序…

Linux通过ifconfig命令ens33没有显示ip地址解决方式

一、问题&#xff1a;登录linux输入ifconfig, ether 00:0c:29:8f:a8:72 ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500ether 00:0c:29:55:f5:0b txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0…