【Spring Boot】单元测试

news2024/11/26 7:46:20

单元测试

单元测试在日常项目开发中必不可少,Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持,以及如何在Spring Boot项目中进行单元测试。

1.Spring Boot集成单元测试

单元测试主要用于测试单个代码组件,以确保代码按预期方式工作。目前流行的有JUnit或TestNG等测试框架。Spring Boot封装了单元测试组件spring-boot-starter-test。下面通过示例演示Spring Boot是如何实现单元测试的。

(1)引入依赖

首先创建Spring Boot项目。在项目中引入spring-boot-starter-test组件,示例配置如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

(2)创建单元测试

在src/test目录下新建一个HelloTest测试类,如果只想输出一句“Hello Spring Boot Test”,只需要用一个@Test注解即可。示例代码如下:

@SpringBootTest
public class HelloTest {
    @Test
    public void hello () {
        System.out.println("Hello Spring Boot Test");
    }
}

在类的上面添加@SpringBootTest注解,系统会自动把这段程序加载到Spring Boot容器。@Test注解表示该方法为单元测试方法。

(3) 运行单元测试

单击Run Test或在方法上右击,再选择“Run ‘hello’”,运行测试方法,运行结果如图所示。

在这里插入图片描述

由图可知,单元测试方法运行成功并输出相应的结果,同时IDEA也会显示运行的所有单元测试结果,包括测试是否通过、运行时间、测试总数和成功次数等。以上示例中的测试方法只是spring-boot-starter-test组件中的一部分功能,Spring Boot自带的spring-boot-starter-test框架对测试的支持非常完善,包括Web请求测试、Service方法测试等,后面会逐一介绍。

2.测试Service方法

一般使用Spring Boot进行单元测试主要是针对Service和API(Controller)进行。接下来通过示例演示Spring Boot如何测试Service方法。

(1)创建Service测试类

创建Service测试类非常简单,使用IDEA可以一键自动创建单元测试类。首先,选择需要测试的Service类或方法,然后在对应的Service类中右击,选择Go To→Test→Create New Test,打开如图所示的创建测试类界面。

在这里插入图片描述

单击OK按钮,IDEA会在Test目录下创建一个UserServiceTest测试类,并为勾选的测试类自动生成单元测试的方法。

(2) 实现单元测试

在上面创建好的UserServiceTest类中会自动创建对应的单元测试方法,我们只需要在测试方法中实现对应的测试代码即可,具体的示例代码如下:

@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void findOne() throws Exception {
        Assert.assertEquals("1002", userService.findOne());
    }
}

如以上示例代码所示,在自动测试类上增加@SpringBootTest注解即可。首先注入需要测试的Service,然后在单元测试中调用该方法,最后通过Assert断句判断返回结果是否正确。

执行单元测试也非常简单,只需将鼠标放在对应的方法上,右击并选择Run执行该方法即可。

3.测试Controller接口方法

上面是针对Service进行测试,但是有时需要对API(Controller)进行测试,这时需要用到MockMvc类。MockMvc能够模拟HTTP请求,使用网络的形式请求Controller中的方法,这样可以使得测试速度快、不依赖网络环境,而且它提供了一套完善的结果验证工具,测试和验证也非常简单、高效。

spring-boot-starter-test具备强大的Mock能力,使用@WebMvcTest等注解实现模拟HTTP请求测试。下面通过示例演示如何测试Controller接口。

步骤01 创建Controller的测试类HelloControllerTest,实现单元测试方法。示例代码如下:

@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
class HelloControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void hello() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/hello")
                .contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andDo(print());
    }
}

在上面的示例中,通过使用MockMvc构造一个post请求,MockMvcRequestBuilders可以支持post和get请求,调用print()方法将请求和相应的过程都打印出来。示例代码说明如下:

MockMvcRequestBuilders.post(“/hello”):构造一个post请求。

contentType (MediaType.APPLICATION_JSON)):设置JSON返回编码,避免出现中文乱码的问题。

andExpect(status().isOk()):执行完成后的断句,请求的状态响应码是否为200,如果不是则测试不通过。

andDo(print()):添加一个结果处理程序,表示要对结果进行处理,比如此处调用print()输出整个响应结果信息。

步骤02 执行单元测试。

完成测试方法之后,执行测试方法:将鼠标放在对应的方法上,右击并选择Run执行该方法即可。可以看到输出如下:

在这里插入图片描述

从上面的输出中可以看到,返回完整的Http Response,包括Status=200、Body = hello Spring Boot,说明接口请求成功并成功返回。

如果接口有登录验证,则需要通过MockHttpSession注入用户登录信息,或者修改登录拦截器取消对单元测试的登录验证。

4.常用的单元测试注解

在实际项目中,除了@SpringBootTest、@Test等注解之外,单元测试还有很多非常实用的注解,具体说明如表所示。

在这里插入图片描述

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

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

相关文章

Windows下控制台播放Badapple,opencv的使用,以及代码优化方案

Windows下控制台播放Badapple 环境准备 VS2022编译环境Opencv(对图像进行灰度处理)的配置 可以看我写的这篇文章vs下opencv的配置素材(Badpple的视频文件) 可以私信我FFmpeg(对视频文件进行处理) 让视频文件的声音分离出来生成mp3文件 ffmpeg -i test.mp4 -map 0:v:0 -c copy…

MySQL用户权限管理和密码策略

目录 用户和权限介绍 密码策略 修改密码策略 用户权限管理 赋予权限 收回权限 用户和权限介绍 所有用户的信息都保存在mysql.user 数据表中 可使用desc 查看数据表结构 user 常用字段 部分字段解析 完整的账户 包含host和user&#xff0c;都是char型 都没有默认值 ho…

fork函数,为什么有两次返回?

前言 fork函数用于创建一个新进程&#xff0c;称为子进程&#xff0c;它与旧进程&#xff08;称为系统调用fork的进程&#xff09;同时运行&#xff0c;此进程称为父进程。 创建新的子进程后&#xff0c;两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc&a…

网络传输层协议详解(TCP/UDP)

目录 一、TCP协议 1.1、TCP协议段格式 1.2、TCP原理 确认应答机制 超时重传机制 (安全机制) 连接管理机制(安全机制) 滑动窗口 流量控制(安全机制) 拥塞控制 延迟应答(效率机制) 捎带应答&#xff08;效率机制&#xff09; ​编辑面向字节流(粘包问题) 缓…

[pyqt5]如何给工具栏图标添加资源文件

第一步新建一个qrc文件 首先新建一个 .qrc 文件&#xff0c;内容格式如下&#xff1a; <RCC><qresource prefix"/" ><file>img/image1.png</file><file>img/image2.png</file><file>img/image3.png</file></qr…

解决win11系统下vivado使用RTL分析闪退、小蓝熊easy anti chat无法启动问题

最近在接触使用vivado时被这个软件庞大的包体和繁多的报错搞得焦头烂额&#xff0c;经过多次尝试&#xff0c;我解决了两个困扰我许久的关乎软件正常使用的问题&#xff0c;将解决办法分享给大家。 一.RTL analysis运行闪退 这个问题关系到程序的正常使用&#xff0c;主要发生…

css animation动画

代码 <!DOCTYPE html> <html ng-app"my_app"><head><meta charset"utf-8"><title></title><script type"text/javascript"></script><style type"text/css">.my-animation {p…

关于海外的应用商店优化

应用商店优化的工作方式与搜索引擎优化 (SEO) 类似&#xff0c;但它有专门为应用商店设计的专业功能。应用商店优化可以帮助应用程序出现在应用商店的顶部结果中&#xff0c;从而提高下载转化率和应用安装量&#xff0c;并且对于我们的应用也有长期可见性。 应用商店优化是一个…

本地用户管理(NETBASE第九课)

本地用户管理(NETBASE第九课) 本地用户&#xff1a;用户本地创建、本地存储、本地登录且只能登录本地一台计算机。 1.认识用户帐户&#xff1a; 1&#xff09;Windows帐户有帐户名、有密码、用户安全标识&#xff08;SID&#xff09; 注:SID安全标识符&#xff08;身份证号…

数据结构-二叉树的代码实现(详解)

内容&#xff1a;二叉树的前、中&#xff0c;后序遍历&#xff0c;层序遍历&#xff0c;二叉树节点个数&#xff0c;叶子节点个数&#xff0c;二叉树高度&#xff0c;第k层节点的个数&#xff0c;查找某个节点&#xff0c;二叉树销毁&#xff0c;判断是否为完全二叉树 目录 前…

科研热点|《电气工程领域高质量科技期刊分级目录(2022版)》公示!

为贯彻落实《关于深化改革 培育世界一流科技期刊的意见》&#xff0c;推进国内外科技期刊的同质等效使用&#xff0c;助力我国科技期刊高质量发展&#xff0c;在中国科协的统一部署下&#xff0c;中国电工技术学会制定《电气工程领域高质量科技期刊分级目录发布工作实施方案&am…

【HarmonyOS】ArkTS学习之页面转场动画的实现

【关键字】 ArkTS、转场动画、PageTransitionEnter、PageTransitionExit 【介绍】 动画交互的实现是一种提升用户体验的方式。动画分为属性属性动画、显示动画、转场动画和路径动画&#xff0c;而转场动画又包含页面间转场、组件内转场和共享元素转场。我觉得页面转场动画挺有趣…

电机的调压调速和PWM调速方法的性能比较、应用场景简介

电机的调压调速和PWM调速是两种不同的电机控制方式。 调压调速&#xff1a;调压调速是通过改变电机输入电压的大小来控制电机的转速和扭矩。通过调节电压&#xff0c;可以改变电机的转矩特性和转速。这种调速方式适用于直流电机和某些类型的交流电机&#xff0c;如感应电动机。…

Windows电源模式(命令行)

一、简介 windows使用powercfg.exe来控制电源方案,像cmd.exe一样,powercfg.exe也是windows自带的。 powercfg命令行选项 选项说明/?、-help显示有关命令行参数的信息。/list、/L列出所有电源方案。/query、/Q显示电源方案的内容。

华为云CodeArts DevSecOps系列插件——助力更高效的软件研发

HDC期间入驻华为云&#xff0c;可参与Toolkit插件抽奖活动&#xff0c;活动链接在文末 一、前言 DevOps的概念想必大家都不陌生&#xff0c;它是一组过程、方法与系统的统称&#xff0c;通过它可以对交付速率、协作效率、部署频率速率、质量、安全和可靠性等进行提升改善。相比…

Linux——信号发送代码

目录 一.信号集操作函数 sigpromask函数 代码详解&#xff1a; ​编辑 考虑情况一&#xff1a;对多个信号的屏蔽 考虑情况二&#xff1a;取消对信号的阻塞 运行结果&#xff1a; 考虑情况三&#xff1a;若不想让进程退出&#xff0c;采用自定义捕捉信号方式&#xff01;…

Java阶段五Day02

Java阶段五Day02 文章目录 Java阶段五Day02MAVEN-聚合(多模块3)回顾多模块2个特性依赖:继承: 聚合场景聚合目的实现聚合聚合总结 远程仓库远程仓库概念配置settings.xml远程库配置注意事项 GIT详细学习git概括git历史本地版本控制相关命令git分支管理分支管理基本概念分支管理相…

axios请求错误处理Uncaught runtime errors:handleError@webpack-internal:///./node_modules/webpack-dev-server

项目环境&#xff1a; vue3.2.13 vue-cli5.0.0 注&#xff1a;该问题只是出现在开发环境&#xff0c;打包后是不会出现的。 问题描述&#xff1a; 由于需要新开一个开发项目&#xff0c;引入必备网络请求axios及他的副手&#xff08;集中处理请求及返回数据&#xff09;&a…

springboot+MySQL大学生体质测试管理系统

功能需求分析的任务是通过详细调查大学生体质测试的测试信息管理系统要处理的所有对象&#xff0c;通过充分了解大学生体质测试管理系统的工作流程&#xff0c;明确使用者的各种需求&#xff0c;充分思考之后可能扩充和改变的情况&#xff0c;然后在这个基础上来设计数据库。

C#(五十九)之三种数据结构 stack queue sortedList

堆栈&#xff08;Stack&#xff09;&#xff1a; 代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时&#xff0c;则使用堆栈。当您在列表中添加一项&#xff0c;称为推入元素&#xff0c;当您从列表中移除一项时&#xff0c;称为弹出元素。 Stack 类的方法和…