玩转springboot之SpringBoot单元测试

news2024/7/30 6:06:07

SpringBoot单元测试

spring单元测试

之前在spring项目中使用单元测试时是使用注解@RunWith(SpringJUnit4ClassRunner.class)来进行的

@RunWith(SpringJUnit4ClassRunner.class)// 通过自动织入从应用程序上下文向测试本身注入bean
@WebAppConfiguration // 指定web环境
@ContextConfiguration(locations 
= { // 指定配置文件
        "classpath*:springmvc.xml"
})

使用@WebAppConfiguration注解之后还可以注入WebApplicationContext环境

@Autowired
private WebApplicationContext webApplicationContext;

private MockMvc mockMvc;

@Before
public void setup(){
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
MockMvc

我们可以使用MockMvc来进行模拟请求

@Test
public void test() throws Exception {
    MockHttpServletResponse response = mockMvc.perform(MockMvcRequestBuilders.get("/json/testJson"))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn().getResponse();
    System.out.println(response.getContentAsString());

}
web安全测试

我们项目中经常会使用spring-security来进行权限,这就给我们的测试带来了麻烦,可以使用spring-security-test依赖来进行测试

<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <version>5.1.5.RELEASE</version>
            <scope>test</scope>
        </dependency>

在进行开启支持springSecurity

@Before
public void setup(){
    mockMvc = MockMvcBuilders
            .webAppContextSetup(webApplicationContext)
            .apply(SecurityMockMvcConfigurers.springSecurity())
            .build();
}

在写单元测试方法时,可以使用@WithMockUser来设置用户

@Test
@WithMockUser(username = "root",password = "123456",roles = "ADMIN")
public void testSecurity() throws Exception {
    MockHttpServletResponse response = mockMvc.perform(MockMvcRequestBuilders.get("/json/testJson"))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn().getResponse();
    System.out.println(response.getContentAsString());

}

然后使用测试的UserDetails来进行用户验证@WithUserDetails("root")

springboot单元测试

springboot中可以使用@SpringBootTest来进行单元测试,其中设置webEnvironment可以来定义运行模式,并在测试用例上使用@RunWith(SpringRunner.class)注解

enum WebEnvironment {

   // 加载WebApplicationContext,并提供一个mock servlet环境,使用该模式内嵌的servlet容器不会启动
   MOCK(false),

   // 加载EmbeddedWebApplicationContext,并提供一个真实的servlet环境,内嵌servlet容器启动,并监听一个随机端口
   RANDOM_PORT(true),

   // 加载EmbeddedWebApplicationContext,并提供一个真实的servlet环境,内嵌servlet容器启动,并监听一个定义好的接口
   DEFINED_PORT(true),

  // 使用SpringApplication加载一个ApplicationContext,但不提供servlet环境
   NONE(false);

}

示例

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests 
{

   @Autowired
   private CustomConfig config;

   @Test
   public void testProfile() {
      System.out.println(config.getName());
   }

}

https://zhhll.icu/2022/框架/springboot/基础/17.springboot单元测试/

本文由 mdnice 多平台发布

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

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

相关文章

防火墙安全策略及用户认证实验

一、实验拓扑 二、实验要求 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;内可以访问&#xff1b;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设…

逆向案例十一——华强北登录逆向

网址&#xff1a;aHR0cHM6Ly9wYXNzcG9ydC5ocWV3LmNvbS9sb2dpbg 登陆页面&#xff1a; 打开开发者工具会出现debugger调试&#xff1a; 直接使用一律不再此处暂停即可。点击登录&#xff0c;找到登录包。 发现有三个参数进行了加密&#xff0c;分别是Password,UserName和Devic…

概率论期末速成(知识点+例题)

考试范围 一&#xff1a; 事件关系运算性质全概率公式、贝叶斯公式古典概型 二&#xff1a; 离散分布律连续密度函数性质 -> 解决三个问题&#xff08;求待定系数、求概率、求密度函数&#xff09;分布函数 -> 解决三个问题常用分布&#xff08;最后一节课的那几个分…

Auslogics Disk Defrag Pro v11激活版下载、安装、使用教程 (磁盘碎片整理工具)

前言 Auslogics Disk Defrag Pro 是一款支持 FAT16 文件系统的磁盘碎片整理工具&#xff0c;它可以快速整理磁盘碎片&#xff0c;使磁盘空间更加整洁&#xff0c;显著提升电脑的运行速度。该软件无需任何分析阶段&#xff0c;并且速度比大多数其他碎片整理软件更快。它可以帮助…

算法力扣刷题记录 四十一【N叉树遍历】

前言 依然是遍历问题。由二叉树扩展到N叉树遍历。 记录 四十一【N叉树遍历】 一、【589. N叉树的前序遍历】 题目 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔…

Node.js_fs模块

文件删除 文件重命名和移动&#xff08;本质都是修改路径&#xff09; 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) &#xff08;打印出来是该文件夹下名称的数组形式&#xff09; 读取当前的文件夹(readdir) 删除文件夹 &#xff08;rmdir&#xff09; 查看资源状态…

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破

合合信息大模型加速器亮相WAIC大会&#xff1a;文档解析与文本识别新突破 文章目录 合合信息大模型加速器亮相WAIC大会&#xff1a;文档解析与文本识别新突破前言合合信息TextIn平台&#xff1a;智能文档处理的领军者文档解析引擎&#xff1a;百页文档秒级处理大模型的发展背景…

文件数据跨境传输这些常见问题,要怎么解决?

越来越多的企业和机构面临文件数据跨境传输的场景和需求&#xff0c;数据跨境流通的过程还是比较复杂的&#xff0c;所以在传输过程中会面临各种问题。 比如法律法规和数据保护、技术标准、网络带宽和速度、数据安全风险控制等&#xff0c;企业要如何解决这些问题呢&#xff1…

数据仓库介绍_维度表(三)

维度表概述 维度表是维度建模的基础和灵魂。前文提到&#xff0c;事实表紧紧围绕业务过程进行设计&#xff0c;而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段&#xff0c;维度字段称为维度属性。 表设计步骤 确定维度&#xff08;表&…

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中&#xff0c;UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始&#xff0c;制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化&#xff0c;完成线框图交互逻辑视觉用户体验&#xff0c;最终输出高保真原型&#xff0c;并将…

2.电容(常见元器件及电路基础知识)

一.电容种类 1.固态电容 这种一般价格贵一些&#xff0c;ESR,ESL比较低,之前项目400W电源用的就是这个&#xff0c;温升能够很好的控制 2.铝电解电容 这种一般很便宜&#xff0c;ESR,ESL相对大一些&#xff0c;一般发热量比较大&#xff0c;烫手。 这种一般比上一个贵一点&am…

this.$confirm不要取消按钮以及右上角的差号

this.$confirm(保存成功! 订单号为&#xff1a;${res.data}, , {confirmButtonText: 确定,showCancelButton: false, // 不显示取消按钮showClose: false, // 不显示右上角的叉号type: success}).then(() > {}) 效果图下&#xff1a;

香港物理服务器租用优势

香港物理服务器租用因其独特的地理位置、先进的网络设施以及优质的服务&#xff0c;成为了众多企业和个人开发者青睐的选择。以下是香港物理服务器租用的主要优势&#xff1a; 稳定性与性能 香港物理服务器直接依赖其高性能硬件运行&#xff0c;不受虚拟化层的影响&#xff0c;…

24小时悬停系留照明无人机技术详解

24小时悬停系留照明无人机是一款专门设计用于提供长时间、高效能照明服务的无人机系统。该系统结合了无人机技术与先进的照明设备&#xff0c;通过系留技术实现无人机的稳定悬停&#xff0c;从而提供连续不断的照明服务。该无人机能够在各种环境条件下进行24小时不间断工作&…

对controller层进行深入学习

目录 1. controller层是干什么的&#xff1f;1.1 controller原理图1.2 controller层为什么要存在&#xff1f;1.2.1 分离关注点1.2.2 响应HTTP请求1.2.3 数据处理与转换1.2.4 错误处理与状态管理1.2.5 流程控制1.2.6 依赖注入与测试 1.3 controller层的优点1.3.1 多端支持1.3.2…

PHP 程序员是学 Swoole ?还是学 Go ?

大家好&#xff0c;我是码农先森。 面临现状 这次为什么要讨论这个话题&#xff0c;因为 Swoole 和 Go 在 PHP 程序员坊间一直都是茶语饭后的谈资&#xff0c;觉得懂 Swoole 和 Go 的就高人一等。相信有很多的 PHP 程序员&#xff0c;自打 Swoole 发布以来就从来没有使用过。…

Z-Fighting 深度冲突权威指南

Z-Fighting 是渲染管道中深度测试中出现的问题。它是由深度值的有限数值精度引起的。故障将表现为不正确的渲染&#xff0c;即屏幕上错误地显示应该被遮挡在另一个后面的对象。故障主要发生在透视投影变换中&#xff0c;但也可能发生在正交投影变换中。到目前为止&#xff0c;一…

GaussDB关键技术原理:高性能(五)

GaussDB关键技术原理&#xff1a;高性能&#xff08;四&#xff09;从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等五方面对高性能关键技术进行解读&#xff0c;本篇将从LLVM动态查询编译执行、SQL-BYPASS执行优化、线程池化、…

threeJS 点击模型出现弹框

前言 需要实现点击模型出现弹框展示模型详细信息 实现代码 // 创建3D渲染器 - 初始化时调用 function createCss3DRender(){labelRenderer new CSS3DRenderer();labelRenderer.setSize(window.innerWidth, window.innerHeight);labelRenderer.domElement.style.position &…

如何将本地仓库中的文件推送到远程git服务器

第一步&#xff1a;进入所在项目&#xff0c;右击打开"Git Bash Here" 第二步&#xff1a;git config --global user.email "18351810763163.com" // 输入你的名称 第三步&#xff1a;git config --global user.name "chenliang-sam&quo…