SpringBoot @SpringBootTest加速单元测试的小诀窍

 更新时间:2021年11月04日 09:08:33   作者:小小工匠  
这篇文章主要介绍了SpringBoot @SpringBootTest加速单元测试的小诀窍,具有很好的参考价值,对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@SpringBootTest加速单元测试小诀窍

Pre

SpringBoot - 应用程序测试方案

随着代码量的争夺,测试类的启动速度变得越来越慢,而大多数情况下只是为了测试一下某个实现类的某个方法而已,比如测试一个DAO层的方法,却要启动这个应用。

在这里插入图片描述

今天我们继续深入了解一下 稍微高级一点的用法

classes

在这里插入图片描述

classes 属性用来指定运行测试类需要装载的 class 集合,如果不指定,那么会默认装载 @SpringBootConfiguration 注解标注的类

如果不指定classes属性,那么启动测试类时需要加载的Bean的数量和正常启动一次入口类加载的 Bean 数量是一样的。

如果你的项目中有很多个 Bean, 特别是有以下几种时:

  • 有 CommandLineRunner 的实现类
  • 用 @PostConstruct 注解指定了初始化方法的类

这几种类在程序初始化的过程中都会运行自身的业务代码或者初始化代码,从而延后了测试方法的运行。

在这种情况下,我们在编写测试类的时候,如果明确这个测试类会用到哪几个 Bean,则可以在 classes 属性处指定,之后启动测试类的时候,就只会加载需要的 Bean 到上下文中,从而加快启动速度。比如:

用法

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes={ArtisanServiceImpl.class})

webEnvironment

在这里插入图片描述

这个属性的含义是说测试类要不要启动一个 web 环境, 要不要启动一个 Tomcat 容器,可选的值为:

  • MOCK:启动一个模拟的 Servlet 环境, 默认值。
  • RANDOM_PORT:启动一个 Tomcat 容器,并监听一个随机的端口号
  • DEFINED_PORT:启动一个 Tomcat 容器,并监听配置文件中定义的端口(未定义则默认监听8080)
  • NONE:不启动 Tomcat 容器

怎么使用呢? 举个例子 如果你要测试的方法不需要用到 Tomcat 容器,比如:

  • 测试 DAO 类的CRUD
  • 测试Service 类的业务方法
  • 测试工具类的公用方法
  • 测试配置文件类是否读取到了正确的值

用法

只需要通过指定

@SpringBootTest(webEnvironment =
SpringBootTest.WebEnvironment.NONE) 

即可达到加速的效果。这时测试类启动时就只会初始化 Spring 上下文,不再启动 Tomcat 容器了:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class ArtisanServiceTests {
    @Autowired
    private IArtisanSerive artisanService;
    @Test
    public void test() {
        // ...
    }
}

@记录使用SpringBootTest遇到的坑

不要导入junit这个依赖,只要上面那个test就行了

导入junit依赖,运行会报错

导入junit,这里会红。运行测试方法会报错

这里变红了,只需要spring-boot-starter-test依赖就好

只留下这个依赖就行了

删掉junit依赖

运行成功!

运行成功!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解SpringBoot整合RabbitMQ如何实现消息确认

    详解SpringBoot整合RabbitMQ如何实现消息确认

    这篇文章主要介绍了SpringBoot整合RabbitMQ是如何实现消息确认的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 基于HttpClient在HTTP协议接口测试中的使用(详解)

    基于HttpClient在HTTP协议接口测试中的使用(详解)

    下面小编就为大家带来一篇基于HttpClient在HTTP协议接口测试中的使用(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • spring security环境搭建

    spring security环境搭建

    本文通过代码给大家介绍了spring security环境搭建的详细教程,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • docusaurus如何添加一个搜索功能

    docusaurus如何添加一个搜索功能

    这篇文章主要介绍了docusaurus如何添加一个搜索功能,本文通过实例图文相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 详解java之redis篇(spring-data-redis整合)

    详解java之redis篇(spring-data-redis整合)

    本篇文章主要介绍了java之redis篇,主要详细的介绍了spring-data-redis整合,有兴趣的可以了解一下。
    2017-01-01
  • SpringMVC实现简单跳转方法(专题)

    SpringMVC实现简单跳转方法(专题)

    这篇文章主要介绍了SpringMVC实现简单跳转方法(专题),详细的介绍了SpringMVC跳转的几种方法,非常具有实用价值,需要的朋友可以参考下
    2018-03-03
  • JPA之使用JPQL语句进行增删改查

    JPA之使用JPQL语句进行增删改查

    这篇文章主要介绍了JPA之使用JPQL语句进行增删改查,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Java实现猜数字小游戏代码

    Java实现猜数字小游戏代码

    大家好,本篇文章主要讲的是Java实现猜数字小游戏代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • shiro 认证流程操作

    shiro 认证流程操作

    这篇文章主要介绍了shiro 认证操作的相关资料,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • JAVA使用POI获取Excel的列数与行数

    JAVA使用POI获取Excel的列数与行数

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12

最新评论