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

简介: SpringBoot - @SpringBootTest加速单元测试的小窍门

20210516092951966.png

Pre


SpringBoot - 应用程序测试方案

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



20210530095258937.png


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


classes

2021053009515353.png


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


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


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


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


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


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


用法


@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes={ArtisanServiceImp



webEnvironment


2021053009543098.png

这个属性的含义是说测试类要不要启动一个 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() {
        // ...
    }
}


相关文章
|
7天前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
64 2
|
24天前
|
XML Java 测试技术
【SpringBoot系列】初识Springboot并搭建测试环境
【SpringBoot系列】初识Springboot并搭建测试环境
57 0
|
19天前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
31 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
18天前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
71 0
|
2月前
|
JavaScript 前端开发 Java
Spring Boot+cucumber+契约测试
Spring Boot+cucumber+契约测试
17 0
Spring Boot+cucumber+契约测试
|
3月前
|
Java 测试技术
SpringBoot单元测试快速写法问题之区分链路环节是否应该被Mock如何解决
SpringBoot单元测试快速写法问题之区分链路环节是否应该被Mock如何解决
|
3月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
|
3月前
|
Java 测试技术 数据库
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
|
3月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
|
3月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之确定链路上的Mock点如何解决
SpringBoot单元测试快速写法问题之确定链路上的Mock点如何解决