Spring Boot测试类的使用参考

Spring Boot测试类的使用参考

1. 集成测试概述

集成测试是在完整的Spring应用上下文中测试应用组件之间的交互。与单元测试不同,集成测试会启动Spring容器并加载所有配置的Bean。

2. 依赖配置

2.1 Maven依赖

<!-- Spring Boot测试核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 如果需要测试Web接口,需添加此依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>test</scope></dependency>

2.2 Gradle依赖

// Spring Boot测试核心依赖 testImplementation 'org.springframework.boot:spring-boot-starter-test' // Web接口测试依赖 testImplementation 'org.springframework.boot:spring-boot-starter-web'

3. 核心注解使用

3.1 @SpringBootTest注解

@SpringBootTest是Spring Boot集成测试的核心注解,用于启动完整的Spring应用上下文。

基础使用方式
@SpringBootTestpublicclassMyIntegrationTest{// 测试代码}
什么时候需要指定启动类?

在以下情况下需要在@SpringBootTest中指定classes属性:

  1. 多模块项目:测试类与Spring Boot启动类不在同一模块中
  2. 启动类不在默认包结构:测试类无法自动扫描到启动类
  3. 自定义配置:需要使用特定的配置类启动测试
// 示例:指定启动类@SpringBootTest(classes=MyApplication.class)publicclassMyIntegrationTest{// 测试代码}

4. 不同版本组合的使用案例

4.1 Spring Boot < 2.2 + JUnit 4

基础集成测试
importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)// 必须显式指定运行器@SpringBootTest(classes=MyApplication.class)// 指定启动类publicclassMyServiceTest{@AutowiredprivateMyServicemyService;// 注入实际的服务Bean@TestpublicvoidtestService(){// 调用实际的业务方法Stringresult=myService.process("test");// 断言结果assertEquals("expected",result);}}
Web接口集成测试
importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringRunner;importorg.springframework.test.web.servlet.MockMvc;importstaticorg.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@RunWith(SpringRunner.class)@SpringBootTest(classes=MyApplication.class)@AutoConfigureMockMvc// 自动配置MockMvcpublicclassMyControllerTest{@AutowiredprivateMockMvcmockMvc;// 注入MockMvc实例@TestpublicvoidtestController()throwsException{mockMvc.perform(get("/api/test"))// 模拟HTTP请求.andExpect(status().isOk());// 验证响应状态}}

4.2 Spring Boot >= 2.2 + JUnit 5

基础集成测试
importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTest(classes=MyApplication.class)// 指定启动类publicclassMyServiceTest{@AutowiredprivateMyServicemyService;// 注入实际的服务Bean@TestpublicvoidtestService(){// 调用实际的业务方法Stringresult=myService.process("test");// 断言结果assertEquals("expected",result);}}
Web接口集成测试
importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.web.servlet.MockMvc;importstaticorg.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@SpringBootTest(classes=MyApplication.class)@AutoConfigureMockMvc// 自动配置MockMvcpublicclassMyControllerTest{@AutowiredprivateMockMvcmockMvc;// 注入MockMvc实例@TestpublicvoidtestController()throwsException{mockMvc.perform(get("/api/test"))// 模拟HTTP请求.andExpect(status().isOk());// 验证响应状态}}

4.3 不指定启动类的情况

当测试类与Spring Boot启动类在同一模块且在同一包结构下时,可以不指定启动类:

// MyApplication.java 位于 com.example 包packagecom.example;@SpringBootApplicationpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}// MyIntegrationTest.java 也位于 com.example 包packagecom.example;@SpringBootTest// 无需指定classes属性publicclassMyIntegrationTest{// 测试代码}

5. 常见集成测试场景

5.1 数据库集成测试

importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.transaction.annotation.Transactional;@SpringBootTest(classes=MyApplication.class)@Transactional// 测试后自动回滚数据库操作publicclassMyRepositoryTest{@AutowiredprivateMyRepositoryrepository;// 注入实际的Repository@TestpublicvoidtestRepository(){// 执行数据库操作MyEntityentity=newMyEntity();entity.setName("test");MyEntitysavedEntity=repository.save(entity);// 验证结果assertNotNull(savedEntity.getId());assertEquals("test",savedEntity.getName());}}

5.2 外部服务集成测试

importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTest(classes=MyApplication.class)publicclassMyExternalServiceTest{@AutowiredprivateExternalApiServiceexternalApiService;// 注入调用外部API的服务@TestpublicvoidtestExternalApi(){// 调用外部APIStringresult=externalApiService.callExternalApi("test");// 验证结果assertNotNull(result);}}

6. 版本兼容性总结

Spring Boot版本JUnit版本核心注解是否需要指定启动类
< 2.24@RunWith(SpringRunner.class) @SpringBootTest多模块或非默认包结构时需要
>= 2.25@SpringBootTest多模块或非默认包结构时需要

7. 最佳实践

  1. 最小化测试范围:虽然是集成测试,也应尽量减少测试类之间的依赖
  2. 使用@Transactional:对于数据库测试,使用@Transactional确保测试后数据回滚
  3. 合理指定启动类:仅在必要时指定classes属性,避免硬编码
  4. 分离测试环境配置:使用不同的配置文件(如application-test.yml)配置测试环境
  5. 使用切片测试:对于大型应用,可以使用@WebMvcTest、@DataJpaTest等切片测试注解,在不启动完整上下文的情况下进行集成测试

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

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

相关文章

0101__WiX Toolset 安装包制作入门教程(目录篇)

https://cloud.tencent.com.cn/developer/article/2349829

高通开源驱动ath12k已正式支持QCC2072

最新消息&#xff0c;高通于25年12月底更新开源驱动ath12k&#xff0c;已正式支持QCC2072 Wi-Fi7 芯片。 驱动对应链接&#xff1a; https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware/-/tree/main 补丁说明链接&#xff1a; https://lore.kernel.org/ath12k/ O…

宇信科技以金融科技前沿探索 获评《财经》新媒体2025“新奖”——“未来场景定义者”

在“十四五”与“十五五”交汇的历史节点&#xff0c;中国经济正以韧性、创新与结构性跃升为鲜明底色&#xff0c;描绘出一幅深刻转型的画卷。其中&#xff0c;以“人工智能”行动为牵引的新科技与实体经济深度融合&#xff0c;成为驱动高质量发展的核心引擎。近日&#xff0c;…

1024编程——让我们的孩子对话未来

编程到底学什么&#xff1f; 其实&#xff0c;编程思维是“理解问题——找出路径”的高效思维过程&#xff0c;它由分解、模式识别、抽象、算法四个步骤组成。编程能够培养孩子的自律性&#xff0c;需要制定规则并培养孩子形成遵守规则的意识。每一门编程语言都有自己的规则&am…

电力行业气体安全监测指南:气体检测仪的应用方案

在电力系统的日常运营与维护中&#xff0c;除了严防触电、火灾等显性风险&#xff0c;一类隐形杀手同样不容忽视——有害气体。无论是密闭变电站内的六氟化硫泄漏、电缆隧道中的缺氧与可燃气体积累&#xff0c;还是蓄电池室可能产生的氢气&#xff0c;都对设备稳定与人员安全构…

unibest+uview-plus,tabbar icon不展示

方法一&#xff1a;如果你是动态 图标的话&#xff0c;你得需要把你要显示的图标 全部先列出来&#xff0c;<template v-else-if"item.iconType unocss || item.iconType iconfont"><view :class"item.icon" class"h-20px w-20px flex ite…

学霸同款2026 AI论文工具TOP9:本科生毕业论文写作全解析

学霸同款2026 AI论文工具TOP9&#xff1a;本科生毕业论文写作全解析 2026年学术写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着AI技术在学术领域的深度应用&#xff0c;越来越多的本科生开始依赖智能工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目…

vue基于spring boot的校园高校毕业生房屋租赁 预约看房 合同 报修应用和研究

文章目录研究背景与意义系统功能设计技术实现与创新应用价值与展望项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;研究背景与意义 随着高校毕业生人数逐年增加…

vue 表格 vxe-table 如何实现透视表拖拽对数据进行分组汇总,金额合计、平均值等

vue 表格 vxe-table 如何实现透视表拖拽对数据进行分组汇总&#xff0c;金额合计、平均值等,通过 custom-config.allowGroup 启用分组拖拽功能 https://vxetable.cn 拖拽列进行数据分组后自动汇总 通过拖拽列到聚合列表&#xff0c;自动对数据进行合计汇总。设置 custom-con…

语言模型在复杂系统风险评估与金融市场稳定性分析中的应用

语言模型在复杂系统风险评估与金融市场稳定性分析中的应用 关键词:语言模型、复杂系统风险评估、金融市场稳定性分析、自然语言处理、数据挖掘 摘要:本文深入探讨了语言模型在复杂系统风险评估与金融市场稳定性分析中的应用。首先介绍了研究的背景、目的、预期读者和文档结构…

ARM处理器芯片之UEFI

UEFI&#xff08;统一可扩展固件接口&#xff09;是现代计算机中用于定义操作系统与固件之间接口的规范&#xff0c;旨在替代传统的BIOS&#xff08;基本输入/输出系统&#xff09;。它起源于英特尔在1998年开发的EFI&#xff08;可扩展固件接口&#xff09;&#xff0c;并于20…

行业透视:云服务器如何重塑各行各业

行业透视&#xff1a;云服务器如何重塑各行各业云服务器的出现&#xff0c;不仅仅是IT基础设施的升级&#xff0c;更是一场深刻的行业变革。从金融到制造&#xff0c;从教育到医疗&#xff0c;云服务器以其强大的算力和灵活性&#xff0c;正在重塑传统行业的商业模式和运营效率…

vue基于Spring Boot的高校教师考勤科研培训管理系统设计与实现应用和研究

文章目录摘要项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 针对高校教师考勤、科研与培训管理的需求&#xff0c;设计并实现了一套基于Vue.js前端框架与…

学长亲荐2026TOP8AI论文平台:本科生毕业论文写作全测评

学长亲荐2026TOP8AI论文平台&#xff1a;本科生毕业论文写作全测评 2026年AI论文写作平台测评&#xff1a;为什么需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作工具已经成为本科生撰写毕业论文的重要辅助手段。然而&#xff0c;市面上的平台种类…

Linux who指令查询和显示当前登录系统的用户信息

who 是 Linux 系统中一个基础且重要的系统管理命令&#xff0c;用于查询和显示当前登录系统的用户信息。它通过读取系统日志文件&#xff08;默认为 /var/run/utmp&#xff09;来获取数据&#xff0c;并将结果以清晰格式输出。一、命令基本语法与功能命令的基本语法为&#xff…

展望未来:云服务器的下一个十年

展望未来&#xff1a;云服务器的下一个十年站在技术发展的十字路口&#xff0c;云服务器正经历着从“资源上云”到“云原生智能”的质变。展望未来十年&#xff0c;云服务器将不再仅仅是算力的堆砌&#xff0c;而将演变为高度智能化、无服务器化和边缘化的新型计算形态。首先是…

大疆无人机常见故障提示及应对指南

大疆无人机在使用过程中&#xff0c;故障提示主要通过 DJI Fly/DJI GO 4 App 弹窗、机身指示灯状态及遥控器提示音三种方式呈现。以下按「连接通信类」「传感系统类」「动力系统类」「图传相机类」「电池电源类」五大核心场景&#xff0c;整理常见故障提示、核心原因及分步解决…

LINUX modprobe 智能加载和卸载内核模块

modprobe 是 Linux 系统中用于智能加载和卸载内核模块的核心命令。与 insmod 等低级工具不同&#xff0c;它的核心优势在于能自动处理模块之间的依赖关系&#xff0c;使内核模块管理变得高效且可靠。核心功能与工作原理modprobe 的主要功能包括&#xff1a;智能加载模块、自动解…

英伟达的AI芯片架构演进的三个阶段

英伟达&#xff08;NVIDIA&#xff09;的这三款产品代表了其AI芯片架构从当前顶峰&#xff08;Hopper&#xff09;到即将大规模普及&#xff08;Blackwell&#xff09;&#xff0c;再到未来愿景&#xff08;Rubin&#xff09;的三个阶段。以下是关于性能、规格及技术演进的深度…

vue基于spring boot的乡村民宿预订周边旅游管理系统应用和研究

文章目录摘要项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着乡村旅游业的快速发展&#xff0c;民宿预订及周边旅游管理系统的需求日益增长。传统的管…