0


Spring Boot实用技巧之单元测试

文章目录

一、单元测试的概念

**  百度百科:单元测试(unit testing)是指对软件中的最⼩可测试单元进⾏检查和验证的过程
**  最小可测试单元因人而异,有的人认为是方法,有的人认为是类,作者更偏向于方法的说法

**  执行单元测试的目的是检测开发者编写的⼀⼩段代码(或功能)是否正确。如果测试结果符合我们的预期,称之为测试通过,否则就是测试未通过(或者叫测试失败)**,最后我们根据测试结果来找错排错

二、单元测试的优势

  1. 非常简单、快速、直观的测试某一个功能是否符合预期
  2. 单元测试时可以不启动tomcat
  3. 在我们打包之前,所有的单元测试都会被执行一遍,一旦有一个单元测试没通过,都会打包失败
  4. 使用单元测试时,可以不污染数据库,也就是说可以在不对数据库进行任何修改的情况下,对 Mapper 层的代码进行测试,技术支持:回滚

三、Spring Boot实现单元测试

(一)添加依赖

**  Spring Boot 项目创建时会默认添加上单元测试框架 spring-boot-starter-test,这个框架主要是依赖另一个著名测试框架 JUnit 实现的,如下图所示
测试框架依赖
**  我们通过查看 spring-boot-starter-test 的源码,就能看到它和 JUnit 的关系

测试框架原理

(二)生成单元测试的类

  1. 在需要进行单元测试的类或接口里面设置创建单元测试类选择test单元测试类的生成
  2. 上述生成的单元测试类其中的方法中是没有内容的;其次生成的单元测试类位于test包下,如图:单元测试类的位置

(三) 添加注解和业务代码

1. 添加 @SpringBootTest 注解

// 表明当前单元测试运行在 spring boot 环境中@SpringBootTestclassUserMapperTest{@TestvoidgetUserById(){}}

2. 添加单元测试的业务代码

// 表明当前单元测试运行在 spring boot 环境中@SpringBootTestclassUserMapperTest{// 如果idea是科学版,那么这里注入的注解使用 @Autowired 可能会报错// 将 UserMapper 注入进来,对它的相关方法进行测试@ResourceprivateUserMapper userMapper;// 测试代码@TestvoidgetUserById(){UserInfo userInfo = userMapper.getUserById(1);System.out.println(userInfo);}}

3. 执行测试

  1. 开始执行执行测试代码
  2. 运行结果测试结果

(四)断言说明与添加

**  百度百科**:断言(assertion)是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息
**  断言所使用的类是

Assertions

,如果断言失败,则后面的代码都不会执行**

  1. 常用的断言方法
    方法说明assertEquals判断两个对象或两个基本类型是否相等assertNotEquals判断两个对象或两个基本类型是否不相等assertSame判断两个对象引用是否指向同一对象assertNotSame判断两个对象引用是否指向不同对象assertTrue判断给定的布尔值是否为trueassertFalse判断给定的布尔值是否为falseassertNull判断给定的对象引用是否为nullassertNotNull判断给定的对象引用是否不为null

  2. 使用断言对测试结果进行判断代码示例:

// 测试代码@TestvoidgetUserById(){UserInfo userInfo = userMapper.getUserById(1);// System.out.println(userInfo);// 测试查询结果是否不为 nullAssertions.assertNotNull(userInfo);}

执行结果:
断言测试结果
如果方法写成 assertNull,那么结果就会报错:
错误的断言结果

四、sql 执行回滚设置

  很多时候,我们只是想进行测试,但是不愿意数据库中的数据也被修改,才是我们就要设置单元测试的回滚操作
**  核心:给测试类或测试类的方法上加上 @Transactional 注解,该注解的本意只是开启事务,并提交事务,但是加在测试类的时候,它又增加了一个功能,就是最后执行完毕之后回滚事务**

代码示例:

@Test@TransactionalvoidupdateNameById(){int result = userMapper.updateNameById(2,"wangwu");Assertions.assertEquals(1, result);}

本文转载自: https://blog.csdn.net/fear_wolf/article/details/130566722
版权归原作者 求索1024 所有, 如有侵权,请联系我们删除。

“Spring Boot实用技巧之单元测试”的评论:

还没有评论