Spring Boot Mockito (三)

Spring Boot Mockito (三)

这篇文章主要是讲解Spring boot 与 Mockito 集成测试。

前期项目配置及依赖可以查看

Spring Boot Mockito (二) - @DataJpaTest
Spring Boot Mockito (一) - @WebMvcTest

@Tag("Integration")
@SpringBootTest
// @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class SpringBootMockitoApplicationTests {@AutowiredOrderController orderController;@AutowiredOrderRepository orderRepository;@AutowiredOrderService orderService;@AutowiredObjectMapper objectMapper;@AutowiredWebApplicationContext wac;MockMvc mockMvc;@BeforeEachvoid setUp() {mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();}@Test@org.junit.jupiter.api.Order(1)void test_ListAllOrders() throws Exception {long count = orderRepository.count();ResultActions resultActions = mockMvc.perform(get(ORDER_PATH)).andExpect(status().isOk());resultActions.andExpect(jsonPath("$.size()").value(count));//System.out.println(resultActions.andReturn().getResponse().getContentAsString(Charset.forName("UTF-8")));}@org.junit.jupiter.api.Order(2)@Testvoid test_GetOrderById() throws Exception {Order order = orderRepository.findAll().get(0);ResultActions resultActions = mockMvc.perform(get(ORDER_PATH + "/{id}", order.getId())).andExpect(status().isOk());resultActions.andExpect(jsonPath("$.id").value(order.getId())).andExpect(jsonPath("$.name").value(order.getName())).andExpect(jsonPath("$.price").value(order.getPrice()));}@org.junit.jupiter.api.Order(3)@Testvoid test_GetOrderById_404() throws Exception {Long orderId = orderRepository.findAll().stream().mapToLong(e -> e.getId()).max().orElse(0) + 10;ResultActions resultActions = mockMvc.perform(get(ORDER_PATH + "/{id}", orderId)).andExpect(status().isNotFound());}@org.junit.jupiter.api.Order(4)@Testvoid test_UpdateOrderById() throws Exception {Order order = orderRepository.findAll().get(0);Order updatedOrder = order;updatedOrder.setName("Picnic pot");updatedOrder.setPrice(95.5d);mockMvc.perform(put(ORDER_PATH + "/{id}", order.getId()).accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(updatedOrder))).andExpect(status().isNoContent());order = orderRepository.findById(order.getId()).get();assertEquals(order.getId(), updatedOrder.getId());assertEquals(order.getName(), updatedOrder.getName());assertEquals(order.getPrice(), updatedOrder.getPrice());}@org.junit.jupiter.api.Order(5)@Testvoid test_UpdateOrderById_404() throws Exception {Order order = orderRepository.findAll().get(0);Long orderId = orderRepository.findAll().stream().mapToLong(e -> e.getId()).max().orElse(0) + 10;Order updatedOrder = order;updatedOrder.setId(orderId + 10);updatedOrder.setName("Picnic pot");updatedOrder.setPrice(95.5d);mockMvc.perform(put(ORDER_PATH + "/{id}", updatedOrder.getId()).accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(updatedOrder))).andExpect(status().isNotFound());}@org.junit.jupiter.api.Order(6)@Testvoid test_CreateNewOrder() throws Exception {Order order = Order.builder().name("Picnic pot").price(95.5d).build();ResultActions resultActions = mockMvc.perform(post(ORDER_PATH).accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(order))).andExpect(status().isCreated());Order createdOrder = objectMapper.readValue(resultActions.andReturn().getResponse().getContentAsString(), Order.class);order = orderRepository.findById(createdOrder.getId()).get();assertNotNull(order);}@org.junit.jupiter.api.Order(7)@Testvoid test_DeleteOrderById() throws Exception {Order order = orderRepository.findAll().get(0);mockMvc.perform(delete(ORDER_PATH + "/{id}", order.getId())).andExpect(status().isNoContent());Optional<Order> existed = orderRepository.findById(order.getId());assertFalse(existed.isPresent());}@org.junit.jupiter.api.Order(8)@Testvoid test_DeleteOrderById_404() throws Exception {Long orderId = orderRepository.findAll().stream().mapToLong(e -> e.getId()).max().orElse(0) + 10;mockMvc.perform(delete(ORDER_PATH + "/{id}", orderId)).andExpect(status().isNotFound());}
}

@org.junit.jupiter.api.Order 在这里没有起作用是由于已注释了@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

InitData类 移入到了测试文件夹中,SpringBootApplication主类启动不会加载InitData
在这里插入图片描述

package pr.iceworld.fernando.springbootmockito.bootstrap;// ...@Component
@RequiredArgsConstructor
public class InitData implements CommandLineRunner {// ...
}

在这里插入图片描述

增加注解@AutoConfigureMockMvc 顾名思义 - 自动化配置 mockMvc, 如以下部分

/*** Annotation that can be applied to a test class to enable and configure* auto-configuration of {@link MockMvc}.* ...*/@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ImportAutoConfiguration
@PropertyMapping("spring.test.mockmvc")
public @interface AutoConfigureMockMvc {// ...
}
@Tag("Integration")
@SpringBootTest
// @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@AutoConfigureMockMvc
class SpringBootMockitoApplicationTests {// ...// @Autowired// WebApplicationContext wac;@AutowiredMockMvc mockMvc;@BeforeEachvoid setUp() {// mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();}// ...
}

@SpringBootTest - Spring Boot为集成测试提供了@SpringBootTest注释。此注释创建应用程序上下文并加载完整的应用程序上下文。

@WebMvcTest - SpringBoot提供@WebMvcTest注释来测试Spring MVC控制器。基于@WebMvcTest的测试运行得更快,因为它只加载指定的控制器及其依赖项,而不加载整个应用程序。
Spring Boot只实例化web层,而不是整个应用程序上下文。在具有多个控制器的应用程序中,还可以通过使用@WebMvcTest(TestControllerOnly.class)来仅实例化一个控制器。
@DataJpaTest - 就像@WebMvcTest可以测试web层,@DataJpaTest用于测试持久层。
@DataJdbcTest - 与 @DataJpaTest功能类似

相关源码已上传到github

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

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

相关文章

【YOLOV5 入门】——构建自己的数据集模型训练模型检验

一、准备工作 1、数据收集 图片类型数据不用多说&#xff1b;视频类型数据利用opencv进行抽帧保存为一张张图片&#xff0c;这里选取30s的名侦探柯南片段进行试验&#xff0c;确保环境解释器下安装了opencv&#xff08;我使用的是另一个虚拟环境&#xff09;&#xff1a; im…

LeetCode每日一题之专题一:双指针 ——快乐数

快乐数OJ链接&#xff1a;202. 快乐数 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 题目分析: 为了房便叙述&#xff0c;将「对于⼀个正整数&#xff0c;每⼀次将该数替换为它每个位置上的数字的平方和」这⼀个 操作记为 x 操作&#xff1b; 题目告诉我们&#…

win10+Intel显卡安装配置stable-diffusion-webui绘画网页

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

基于springboot实现墙绘产品展示交易平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现墙绘产品展示交易平台管理系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本墙绘产品展示交易平台就是在这样的大环境下诞生&…

企业微信企业主体变更认证介绍

企业微信变更主体有什么作用&#xff1f; 说一个自己亲身经历的事情&#xff0c;当时我在一家教育公司做运营&#xff0c;公司所有客户都是通过企业微信对接的。后来行业整顿&#xff0c;公司不得不注销&#xff0c;换了营业执照打算做技能培训&#xff0c;但发现注销后原来的企…

Gitee上传私有仓库

个人记录 Gitee创建账号 以KS进销存系统为例&#xff0c;下载到本地电脑解压。 新建私有仓库 仓库名称&#xff1a;ks-vue3&#xff0c;选择‘私有’ 本地配置 下载安装git配置git 第一次配置可以在本地目录右键【Open Git Bash here】输入【Git 全局设置】再输入【创…

点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

RabbitMQ系统监控、问题排查和性能优化实践

一、系统监控&#xff1a;RabbitMQ的各项性能指标及监控 Message Rates&#xff1a;消息率包含了publish&#xff0c;deliver/get&#xff0c;ack等方面的数据&#xff0c;反映了消息在系统中流转的情况。Queue Length&#xff1a;队列长度反映了系统当前的负载情况。如果队列…

【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权限

系列文章目录 【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍 【跟小嘉学 Linux 系统架构与开发】二、Linux发型版介绍与基础常用命令介绍 【跟小嘉学 Linux 系统架构与开发】三、如何查看帮助文档 【跟小嘉学 Linux 系统架构与开发】四、文件和目录的权…

第十一届蓝桥杯物联网试题(省赛)

对于通信方面&#xff0c;还是终端A、B都保持接收状态&#xff0c;当要发送的数组不为空再发送数据&#xff0c;发送完后立即清除&#xff0c;接收数据的数组不为空则处理&#xff0c;处理完后立即清除&#xff0c;分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…

前端和后端在软件开发中的两个重要部分

前端和后端是软件开发中的两个重要部分&#xff0c;它们在职责、技术栈和工作重点上都有所不同。以下是前端和后端的主要区别&#xff1a; 职责不同&#xff1a; 前端&#xff1a;前端主要负责用户可以看到的部分&#xff0c;即用户界面&#xff08;UI&#xff09;和用户体验&a…

day18java学习打卡:类中属性的使用

/* * 类中属性的使用&#xff1a; * * 属性&#xff08;成员变量&#xff09; vs 局部变量 * 1.相同点&#xff1a; * 1.1定义变量的格式&#xff1a;数据类型 变量名变量值; * 1.2先声明&#xff0c;后使用 * 1.3变量都有其对应的作用域 * * * 2.不同点…

Day5:学习尚上优选项目

学习计划&#xff1a;完成尚硅谷的尚上优选项目 学习进度&#xff1a;尚上优选项目 知识点&#xff1a; 四、 搭建平台管理端前端环境 SpringCloud相关概念 微服务的由来微服务本质什么样的项目适合微服务微服务开发框架什么是Spring CloudSpring Cloud和Spring Boot是什么关…

数据库更新两张相关联的表

在SQL Server中&#xff0c;更新两张相关联的表是经常需要的操作&#xff0c;以下是一些更新两张表的不同写法示例&#xff1a; 假设我们有两张表 Employees 和 SalaryUpdates&#xff0c;我们想要根据 SalaryUpdates 中的新工资来更新 Employees 表中的工资。 使用内连接&…

4.4java学习总结

包装类 java给出了一组包装类可以将基本数据类型包装成对象&#xff0c;分别为Byte、Short、Integer、Long、Float、Double、Character、Boolean&#xff0c;对应不同的基本数据类型。 基本数据类型 包装类 int Integer char long Character Long float Float double …

【python实战】--提取所有目录下所有Excel文件指定列数据

系列文章目录 文章目录 系列文章目录前言一、问题描述二、python代码1.引入库 总结 前言 一、问题描述 需要提取指定路径下所有excel文件中指定一列数据&#xff0c;汇总到新文件&#xff0c;&#xff08;逐列汇总&#xff09; 二、python代码 1.引入库 代码如下&#xff08…

UE4_X光效果设置_法线图影响透明度

UE4_X光效果设置_法线图影响透明度 2019-03-22 13:37 Exponentin 设置轮廓光扩散度 baseReflectFactionIn 设置内部黑色的亮度值。nromal&#xff0c;连接应用一张法线图&#xff0c;Lerp两色插值&#xff0c;给两个数值&#xff0c;制造一个渐变。 法线图影响透明度&#xf…

检查Uniswap V2 和 Uniswap V3 之间的价格差异 获取套利可能性数据

这段代码是使用Uniswap V2 Router 2合约中的`getAmountsOut`函数来计算输入代币数量对应的输出代币数量。让我来解释一下具体的含义: - `uniswapv2_router2_contract`是一个与Uniswap V2 Router 2合约进行交互的Python对象。 - `functions.getAmountsOut`是合约中的一个函数,…

在一套Dockerfile中完成编译和运行环境部署

大纲 解释型语言编译环境解释环境编译型语言编译环境运行环境 方法编译环境安装系统安装编译依赖下载代码特殊处理&#xff08;可以忽略&#xff09;编译准备&#xff08;可以忽略&#xff09;编译打包依赖&#xff08;编译结果&#xff09; 运行环境安装操作系统安装运行时依赖…

Leetcode 39. 组合总和

心路历程&#xff1a; 这道题就差把回溯算法写在题面上了&#xff0c;其实这道题如果不是要遍历所有的可能情况&#xff0c;而是求某个最大最小值的话&#xff0c;就是一道经典的完全背包问题了。 这道题有一个注意的点&#xff0c;就是如何通过‘控制候选集合’来实现‘不重复…