Spring项目单元测试
创始人
2024-11-05 17:09:14
0

一、单元测试是什么


        单元测试(unit testing):是指对软件中的最小可测试单元进行检查和验证的过程就叫单元测试。

        对Spring项目中代码逻辑进行单个单元测试的过程,验证是否符合预期工作,并确保它们能正确地集成和交互。

二、单元测试好处


        (1)可控性:可以最小颗粒度的测试某个组件功能,减少外部依赖的影响。

        (2)提高代码质量:通过单元测试可以在提测之前及早发现和修复潜在问题,提升代码的可靠性。

        (3)便于集成测试:可通过多个组件的协同工作,验证整个系统的功能和性能。

 

三、断言


        断言(assertions):用来对测试需要满足的条件进行验证。就是你调用的方法断言了什么,结果就得是什么,否则就报错说你这个跟要求不一样。如果断言失败,则后面的代码都不会执行。

        (1)简单断言:用来对单个值进行简单的验证。

方法

说明

assertEquals

判断两个对象或两个原始类型是否相等

assertNotEquals

判断两个对象或两个原始类型是否不相等

assertSame

判断两个对象引用是否指向同一个对象

assertNotSame

判断两个对象引用是否指向不同的对象

assertTrue

判断给定的布尔值是否为 true

assertFalse

判断给定的布尔值是否为 false

assertNull

判断给定的对象引用是否为 null

assertNotNull

判断给定的对象用是否不为 null

        (2)数组断言:通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等。

第一个参数是期望值,第二个参数是实际值,第三个参数是异常报文

@DisplayName("测试数组断言") @Test void testArrayAssertions(){     Assertions.assertArrayEquals(             new String[]{"suncat","123456789"},             new String[]{"suncat","123456789"},             "数组不一样"     ); }

        (3)组合断言:assertAll 方法接受多个 org.junit.jupiter.api.Executable 函数式接口的实例作为要验证的断言,可以通过 lambda 表达式很容易的提供这些断言。

@DisplayName("组合断言") @Test void testAssertAll(){     Assertions.assertAll(         "测试组合判断",         ()->Assertions.assertEquals("suncat","suncat"),         ()->Assertions.assertTrue(true)     ); }

        (4)异常断言:JUnit5提供了一种断言方式Assertions.assertThrows() ,配合函数式编程就可以进行使用。

@DisplayName("测试断言异常") @Test void testException(){     Assertions.assertThrows(         RuntimeException.class,         ()->System.out.println(10/0)     ); }

        (5)超时断言:Junit5还提供了Assertions.assertTimeout() 为测试方法设置了超时时间。

@DisplayName("超时断言") @Test void testTimeout(){     Assertions.assertTimeout(         Duration.ofMillis(1000),         ()->Thread.sleep(2000)     ); }

四、单元测试使用实例


1、启动Spring Boot全部环境

        模拟启动整个Spring项目,会加载其允许所需要的所有环境,包括web层及其他服务。启动起来会很慢,往往会加载一些与本单元测试无关紧要的框架。适用于单元测试Controller接口控制层与Service业务逻辑层。

        Spring Boot 项目创建时会默认单元测试框架 spring-boot-test,而这个单元测试框架主要是依靠另⼀ 个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项目创建是自动添加的:

     org.springframework.boot     spring-boot-starter-test     test 

        在test.java目录下增加测试class文件

        测试文件中增加

@SpringJUnitConfig(classes=XXXApplication.class)//指定要测试的Spring应用程序类 @SpringBootTest

        其中XXXApplication为Spring项目的启动类

        添加对应的测试方法,写对应的单元测试执行逻辑,最后依据结果进行断言。

        需要注意一下,如果不想单元测试执行过程中污染数据库中的数据,可以添加@Transactional 注解来执行事务操作,单元测试执行后回滚事务

2、只加载数据环境

        利用Mybatis Plus的注解,只加载特定数据库模块,其中数据库使用项目中的数据库。启动快,无关模块不需要加载。适用于单元测试DAO层代码,校验sql写得是否合理。

        在pom.xml中添加Mybatis-Plus-Test依赖,不过需要注意的是mybatis-plus的版本必须在3.4.0以上

      com.baomidou     mybatis-plus-boot-starter-test     ${mybatis-plus.version} 

        创建mybatis单元测试类

        添加MybatisPlusTest相关注解

@MybatisPlusTest @AutoConfigureTestDatabase(replace=AutoConfigureTestDatabase.Replace.NONE)

        添加对应的单元测试mybatis操作方法

 

        执行测试方法,可以看到启动时间还是比较短的,而且也执行对应的sql,返回我们想要的数据。

 

备注:

        有时候我们本地编译的时候,编译的同时会执行我们的单元测试。如果我们只想编译项目,

不想它执行我们的单元测试,我们可以在mvn指令框内输入下述指令之一即可。

指令一:

mvn clean install -DskipTests

指令二:

mvn clean install -Dmaven.test.skip=true

        在idea软件右侧菜单栏点击Maven菜单,点击命令行,输入命令。

相关内容

热门资讯

黑科技辅助挂(智星德州)外挂软... 黑科技辅助挂(智星德州)外挂软件透明挂(ai代打)果然真的有挂(2023已更新)(小红书)1、用户打...
aapoker辅助工具(来玩德... aapoker辅助工具(来玩德州app)德扑之星好牌(辅助挂)都是真的有挂(有挂外挂)-今日头条1、...
7分钟理解!德扑之星可以设置埋... 7分钟理解!德扑之星可以设置埋牌(软件透明挂)外挂透明挂辅助脚本(2024已更新)(今日头条)德扑之...
透明辅助挂(wEpoKe)外挂... 透明辅助挂(wEpoKe)外挂辅助APP(智能ai代打)原来真的有挂(2023已更新)(微博客户端)...
微扑克游戏辅助器(德州wepo... 微扑克游戏辅助器(德州wepower)hm3德州辅助怎么购买(透明黑科技)好像真的有挂(有挂机器人)...
七分钟了解!wpk有辅助挂(黑... 七分钟了解!wpk有辅助挂(黑科技)外挂透明挂辅助APP(2025已更新)(今日头条)1、下载好wp...
透明辅助挂(AAPOKeR)外... 透明辅助挂(AAPOKeR)外挂辅助工具(智能ai代打)本来真的有挂(2025已更新)(今日头条);...
德州之星辅助(扑克王)德扑手机... 德州之星辅助(扑克王)德扑手机上算胜率的软件(透明黑科技)总是真的有挂(有挂app)-抖音一、德州之...
四分钟实锤!德州ai辅助代理(... 四分钟实锤!德州ai辅助代理(透视)外挂透明挂辅助安装(2021已更新)(小红书);1、许多玩家不知...
wpk辅助(poker mas... wpk辅助(poker master安卓版)软件透明挂辅助APP(透视辅助)果真真的有挂(2020已...