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领…

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

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

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…

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

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

Leetcode 39. 组合总和

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

Android java基础_类的继承_android 类继承(2)

运行结果&#xff1a;rootubuntu:/home/topeet/guyilian# javac Ext2.java rootubuntu:/home/topeet/guyilian# java Ext2 10 ustc **子类继承父类的方法和属性都可以进行覆写&#xff0c;我们在子类覆写父类的printInfo方法。**class Person { private int age; public void …

AI技术在金融领域/银行业的应用和风险

前言 随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经在各行各业得到了广泛的应用&#xff0c;其中包括银行业。银行业作为经济的重要组成部分&#xff0c;一直在不断地探索和应用新技术&#xff0c;以提升服务效率、风险管理和客户体验。然而&…

SpringBoot + Vue + Nginx前后端分离项目本地部署(Win)

SpringBoot Vue Nginx前后端分离项目本地部署步骤 本地部署所需步骤 将后端打包好的jar文件和前端生成的静态资源文件放入同一目录启动Spring Boot应用配置Nginx并重启访问 http://your_domain 查看部署效果 前端Vue项目部署 将写好的vue代码的目录下运行 npm run build …

【MATLAB源码-第32期】基于matlab的通信及雷达中常用伪随机码m序列的仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 M序列&#xff0c;也称为最大长度序列或者伪随机序列&#xff0c;是一种特殊的二进制序列。它的特点是在有限的长度内&#xff0c;尽管它是伪随机的&#xff0c;但它会在特定的周期内不重复地循环。 在数学上&#xff0c;M序…

设计模式——建造者模式03

工厂模式注重直接生产一个对象&#xff0c;而建造者模式 注重一个复杂对象是如何组成的&#xff08;过程&#xff09;&#xff0c;在生产每个组件时&#xff0c;满足单一原则&#xff0c;实现了业务拆分。 设计模式&#xff0c;一定要敲代码理解 组件抽象 public interface …

腾讯云4核8G服务器多少钱?4C8G可以干啥?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

JRT简化开发环境

JRT是完全前后端分离的项目&#xff0c;实际工程是逻辑上完全前后端分离&#xff0c;代码层级和工程是不离的。这样就可以做到一键启动&#xff0c;同时又有分离的好处。开始页面后缀都沿用aspx&#xff0c;最开始考虑过修改后缀为html&#xff0c;当时觉得搞aspx也不错&#x…