SpringBoot 单元测试 - 登录认证在 Spring Boot 上的标准单元测试写法。

👉 请投票支持这款 全新设计的脚手架 ,让 Java 再次伟大!

在这里插入图片描述

不要使用 @SpringBootTest

使用 @SpringBootTest 进行单元测试会启动整个 Spring Boot 容器,并引入整个项目的 development&test 依赖。缺点是速度慢、体积大、测试目标不明确、低内聚高耦合。

明确我们要测试的目标是登录功能,所以只要启动 Spring Mvc 的依赖范围就可以了,其他层面的依赖可以用「打桩」来解决。

使用 @WebMvcTest

所以只需要隔离启动 Spring Mvc 环境,即可完成登录功能的测试了。

@WebMvcTest(value = {SignController.class})
@Import({HttpFireWallConfig.class})
class SignMvcTest {@MockBean private SignService signService;@MockBean private CookieJwt cookieJwt;@Autowired private MockMvc mockMvc;@Test@WithMockUservoid signIn_givenValidHttpRequest_shouldSucceedWith200() throws Exception {String stubUsername = "test_04cb017e1fe6";String stubPassword = "test_567472858b8c";SignInDto signInDto = new SignInDto();signInDto.setUsername(stubUsername);signInDto.setPassword(stubPassword);when(signService.signIn(signInDto)).thenReturn(1L);mockMvc.perform(post("/auth/sign-in").contentType(MediaType.APPLICATION_JSON).content("""{"username": "test_04cb017e1fe6","password": "test_567472858b8c"}""").with(csrf())).andExpect(status().isOk());}@Test@WithMockUservoid signIn_givenInValidHttpRequest_shouldFailedWith400() throws Exception {String stubUsername = "test_04cb017e1fe6";String stubPassword = "test_567472858b8c";SignInDto signInDto = new SignInDto();signInDto.setUsername(stubUsername);signInDto.setPassword(stubPassword);when(signService.signIn(signInDto)).thenReturn(1L);mockMvc.perform(post("/auth/sign-in").contentType(MediaType.APPLICATION_FORM_URLENCODED).content("""{"username": "test_04cb017e1fe6","password": "test_567472858b8c"}""").with(csrf())).andExpect(status().isBadRequest());when(signService.signIn(signInDto)).thenReturn(1L);mockMvc.perform(post("/auth/sign-in").contentType(MediaType.APPLICATION_JSON).content("""{"username": "test_04cb017e1fe6"}""").with(csrf())).andExpect(status().isBadRequest());}
}

更多单元测试的写法

更多的区分了隔离环境的单元测试代码,都集成到了下面的项目中:👇
一款全新设计的脚手架 ,让 Java 再次伟大!
在这里插入图片描述

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

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

相关文章

HarmonyOS Next应用开发——图像PixelMap变换

【高心星出品】 图像变换 图片处理指对PixelMap进行相关的操作,如获取图片信息、裁剪、缩放、偏移、旋转、翻转、设置透明度、读写像素数据等。图片处理主要包括图像变换、位图操作,本文介绍图像变换。 图形裁剪 // 裁剪图片 x,y为裁剪的起…

【element-tiptap】如何把分隔线改造成下拉框的形式?

当前的分隔线只有细横线这一种形式 但是咱们可以看一下wps中的分隔线,花里胡哨的 这些在wps里都需要使用快捷键打出来,真没找到菜单在哪里 那么这篇文章咱们就来看一下如何改造分隔线组件,改造成下拉框的形式,并且把咱们想要的分…

如何调试浏览器中的内存泄漏?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介⭐ 如何调试浏览器中的内存泄漏?1. 什么是内存泄漏?2. 调试内存泄漏的工具3. 如何使用 Memory 面板进行内存调试3.1 获取内存快照(Heap Snapshot)获取内存快照的步骤:快照…

【ShuQiHere】深入解析数字电路中的锁存器与触发器

深入解析数字电路中的锁存器与触发器 🤖🔌 在数字电路设计中,**锁存器(Latch)和触发器(Flip-Flop)**是实现时序逻辑的基本元件。它们能够存储状态,是构建复杂数字系统的关键。本文将…

Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

在一个大型的官方镜像中 &#xff0c;我通过 docker history --no-trunc <image_id> 看到&#xff0c;该镜像某一步的构建过程是&#xff1a; RUN |3 CUDA_VERSION12.4.1.003 CUDA_DRIVER_VERSION550.54.15 JETPACK_HOST_MOUNTS /bin/sh -c if [ -n "${JETPACK_HOS…

如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)

文章目录 一、什么是 Spring Boot Starter&#xff1f;二、为什么要自定义 Starter&#xff1f;三、自定义 Starter 的基本步骤1. 创建 Maven 项目2. 配置 pom.xml3. 创建自动配置类4. 创建业务逻辑类5. 创建 spring.factories 四、使用自定义 Starter五、总结推荐阅读文章 在使…

Android广播限制Background execution not allowed: receiving Intent { act=

“Background execution not allowed: receiving Intent”这个错误信息通常出现在Android应用开发中&#xff0c;特别是在处理后台任务或接收广播&#xff08;Broadcast&#xff09;时。这个错误表明应用试图在后台执行某些操作&#xff0c;但Android系统出于电池优化和用户体验…

【二刷hot100】day 4

终于有时间刷刷力扣&#xff0c;求实习中。。。。 目录 1.最大子数组和 2.合并区间 3.轮转数组 4.除自身以外数组的乘积 1.最大子数组和 class Solution {public int maxSubArray(int[] nums) {//就是说可以转换为计算左边的最大值&#xff0c;加上中间的值&#xff0c…

1.6,unity动画Animator屏蔽某个部位,动画组合

动画组合 一边跑一边攻击 using System.Collections; using System.Collections.Generic; using UnityEngine;public class One : MonoBehaviour {private Animator anim;// Start is called before the first frame updatevoid Start(){anim GetComponent<Animator>();…

Scala中的reduce

作用&#xff1a;reduce是一种集合操作&#xff0c;用于对集合中的元素进行聚合操作&#xff0c;返回一个单一的结果。它通过指定的二元操作&#xff08;即取两个元素进行操作&#xff09;对集合中所有的元素进行递归处理&#xff0c;并最终将其合并为一个值。 语法&#xff1…

PPT自动化:Python如何修改PPT文字和样式!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 使用 Python 修改 PPT 文本内容📝 遍历所有幻灯片和文本框📝 设置和修改文本样式📝 复制和保留文本样式⚓️ 相关链接 ⚓️📖 介绍 📖 在日常工作中,PPT 的文字内容和样式修改似乎是一项永无止境的…

每日算法一练:剑指offer——数组篇(3)

1.报数 实现一个十进制数字报数程序&#xff0c;请按照数字从小到大的顺序返回一个整数数列&#xff0c;该数列从数字 1 开始&#xff0c;到最大的正整数 cnt 位数字结束。 示例 1: 输入&#xff1a;cnt 2 输出&#xff1a;[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,1…

平衡二叉树最全代码

#include<stdio.h> #include<stdlib.h>typedef struct Node {int val;int height;struct Node *left;struct Node *right; }Node;//创建新结点 Node* newNode(int val) {Node *node (Node*)malloc(sizeof(Node));node->val val;node->height 1;node->l…

渗透测试实战—教育攻防演练中突破网络隔离

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…

基准线markLine的值超过坐标轴范围导致markline不显示

解决问题&#xff1a;动态设置yAxis的max值&#xff08;解决基准线不在y轴范围&#xff09; yAxis: [{name: 单位&#xff1a;千,...yAxis,nameTextStyle:{...yAxis.nameTextStyle,padding: [0,26,0,24]},paddingLeft:24,paddingRight:26},{name: 单位&#xff1a;百分比,...yA…

基金好书入门阅读笔记《基金作战笔记:从投基新手到配置高手的进阶之路》笔记3

公募基金的分类方式按投资范围分 80%以上资产投资于股票的&#xff0c;叫股票基金&#xff1b;80%以上资产投资于债券的&#xff0c;叫债券基金&#xff1b;80% 以上资产投资于其他基金的&#xff0c;叫FOF; 80%以上资产投资于货币市场的&#xff0c;叫货币基金&#xff1b;以上…

【三】企业级JavaScript开发之手册与规范

规范 ECMA-262 规范 包含了大部分深入的、详细的、规范化的关于 JavaScript 的信息。这份规范明确地定义了这门语言。 但正因其规范化&#xff0c;对于新手来说难以理解。所以&#xff0c;如果你需要关于这门语言细节最权威的信息来源&#xff0c;这份规范就很适合你&#xf…

建库建表练习

目录 根据以下需求完成图书管理系统数据库及表设计&#xff0c;并建库建表&#xff0c;并截图创建表的详细信息(desc 表名),不用添加数据 1. 用户表: 字段: 姓名&#xff0c;用户名&#xff0c;密码&#xff0c;电话&#xff0c;住址&#xff0c;专业及年级 2. 图书表: 字段: 图…

大数据新视界 -- 大数据大厂之 AI 驱动的大数据分析:智能决策的新引擎

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

vueuse的常用方法记录

useStorage(key, value): 响应式的LocalStorage// 初始化 useLocalStorage&#xff0c;传入 key 和默认值 const storedValue useStorage(my-key, default-value);// 监听存储值的变化 watch(storedValue, (newValue, oldValue) > {console.log(存储值从, oldValue, 变更为…