SpringBoot @SpringBootTest加速单元测试的小诀窍
作者:小小工匠 时间:2022-12-17 13:05:06
@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依赖,运行会报错
这里变红了,只需要spring-boot-starter-test依赖就好
删掉junit依赖
运行成功!
来源:https://artisan.blog.csdn.net/article/details/117232544
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
一文详解gRPC快速整合SpringCloud
![](https://img.aspxhome.com/file/2023/4/70504_0s.jpg)
MyBatis注解式开发映射语句详解
![](https://img.aspxhome.com/file/2023/1/63771_0s.png)
浅谈java常用的几种线程池比较
java 判断两个对象是否为同一个对象实例代码
Android实现拍照及图片裁剪(6.0以上权限处理及7.0以上文件管理)
Spring使用注解存储和读取对象详解
![](https://img.aspxhome.com/file/2023/5/89485_0s.png)
spring hibernate实现动态替换表名(分表)的方法
Mybatis 级联删除的实现
C# 使用Log4net添加日志记录的方法
![](https://img.aspxhome.com/file/2023/6/106446_0s.png)
Mybatis环境配置及测试详解
Java实现的简单音乐播放器功能示例
![](https://img.aspxhome.com/file/2023/6/91466_0s.png)
Android使用phonegap从相册里面获取照片(代码分享)
C#常用数据结构和算法总结
![](https://img.aspxhome.com/file/2023/6/69206_0s.png)
springboot实用配置详细图文教程
![](https://img.aspxhome.com/file/2023/8/124708_0s.png)
flutter仿微信底部图标渐变功能的实现代码
![](https://img.aspxhome.com/file/2023/5/120165_0s.gif)
Android中WebView图片实现自适应的方法
C#实现随机数产生类实例
Java编程实现帕斯卡三角形代码示例
![](https://img.aspxhome.com/file/2023/3/58303_0s.gif)
在Winform动态启动、控制台命令行的方法
flutter实现头部tabTop滚动栏
![](https://img.aspxhome.com/file/2023/7/130457_0s.gif)