SpringBootTest单元测试—加入@Test无法启动测试方法,什么情况下需要加@RunWith(SpringRunner.class)?
spring环境下单元测试:
SpringBoot环境下单元测试:
一、SpringBoot2.4.0之后
二、2.2.0 < SpringBoot < 2.4.
三、SpringBoot2.2.0之前
最近写SpringBootTest单元测试时,加入@Test无法启动测试方法(我用的是SpringBoot2.2.0之前的版本),然后我根据错误提示找到了解决方法一,但我记得之前学习SpringBoot环境下单元测试不是这样做的,我就翻阅之前的资料,找到了解决方法二,然后我发现之前是不用加@RunWith(SpringRunner.class)的,此时我就不太理解了。之前只会使用,没碰到过什么问题,所以也没去研究过。什么情况下需要加@RunWith(SpringRunner.class),什么情况下不需要加?为了解决疑问,通过查阅资料,分享一下我的总结。
先说一下我上面的解决方法:
方法一:不加@RunWith,直接导入junit-jupiter坐标
方法二:添加注解@RunWith(SpringRunner.class)
总结一下什么情况下需要使用@RunWith(SpringRunner.class):
spring环境下单元测试:
使用@RunWith(SpringJUnit4ClassRunner.class)设置类运行器
使用@ContextConfiguration设置Spring环境对应的配置类或配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {@Autowiredprivate BookService bookService;@Testpublic void testSave(){bookService.save();}
}
SpringBoot环境下单元测试:
一、SpringBoot2.4.0之后
1、SpringBoot2.4.0之后,spring-boot-starter-test默认仅支持JUnit5,去掉了兼容JUnit4引擎:org.junit.vintage:junit-vintage-engine,无需添加@RunWith(SpringRunner.class)
@SpringBootTest
class BookServiceTest {@Autowiredprivate BookService bookService;@Testvoid save() {bookService.save();}
}
二、2.2.0 < SpringBoot < 2.4.0
2、2.2.0 < SpringBoot < 2.4.0,spring-boot-starter-test默认使用JUnit5,同时也兼容支持JUnit4,无需添加@RunWith(SpringRunner.class)
@SpringBootTest
class BookServiceTest {@Autowiredprivate BookService bookService;@Testvoid save() {bookService.save();}
}
如果想只用Junit5,可以排除junit-vintage-engine,排除Junit4的干扰,JUnit4中使用的测试引擎是junit-vintage-engine,JUnit5中使用的测试引擎是junit-jupiter-engine
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions>
</dependency>
三、SpringBoot2.2.0之前
1.SpringBoot2.2.0之前,spring-boot-starter-test引入的是JUnit4,使用的测试引擎是junit-vintage-engine
详说一下上面的解决方法:
解决方法一:不加@RunWith,直接导入junit-jupiter坐标
<dependency> <groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version>
</dependency>
导入坐标后可以看到junit-jupiter-engine的测试引擎
解决方法二:添加注解@RunWith(SpringRunner.class) 推荐使用
如果使用SpringBoot2.2.0之前的版本,按照下面这样写就行了
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class TestConnection {@Testpublic void test() {}
}
提示:测试类和方法需要改成public类型,不改的话测试方法无法启动
如果不加@RunWith,测试方法能正常启动,但是测试可能会失败,比如出现@Autowired无法注入等一些问题
看一下官方的说明
如果您使用的是JUnit4,请记得将@RunWith(SpringRunner.class)添加到测试方法中,否则注解将被忽略。如果您使用的是JUnit5,则无需添加等效的@ExtendWith(SpringExtension),因为@SpringBootTest和其他@…Test注解已经包含了这些注解。
SpringBootTest单元测试—加入@Test无法启动测试方法,什么情况下需要加@RunWith(SpringRunner.class)?相关推荐
- LANDESK操作系统部署时,网卡启动后,自动进入pe选择菜单,而不用按F8 进行选择启动菜单的情况下,如何操作?...
LANDESK操作系统部署时,网卡启动后,自动进入pe选择菜单,而不用按F8 进行选择启动菜单的情况下,如何操作? 设置方法: 使用PXE的控制队列 PXE的控制队列是另一个远程图像PXE的部署操作系 ...
- java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法
最近一段时间都是在补之前的技术债,一直忙着写业务代码没有注重代码的质量,leader也在强求,所有要把单元测试搞起来了 我把单元测试分为两种 一个是service的单元测试,一个是controller ...
- SpringBoot2.1.5 (24): @SpringBootTest单元测试
SpringBoot2.1.5 (24): @SpringBootTest单元测试 写测试用例 可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 可以自动测试,可以在项目打包前进行测试校验 ...
- 单元测试@Test+@RunWith(SpringRunner.class)
什么是单元测试? 我们刚开始接触编程过程中使用最多的测试就是使用main方法,但是main方法测试每次测试都需要全部执行完,效率比较慢,如何测试一部分代码呢?那么就可以使用单元测试@Test来测试你需 ...
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...
无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...
- 启动ipython出错_python-在异常情况下启动IPython shell
python-在异常情况下启动IPython shell 当我的程序运行引发异常的行时,是否可以启动IPython Shell或提示? 我对引发异常的上下文,变量,范围(和子范围)最感兴趣. 类似于V ...
- linux如何启动文件夹,linux 下常见启动文件配置
在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login或 ~/. ...
- linux6无法启动iscsi服务,RHEL6下安装配置ISCSI服务器
1.安装所需软件: yum –y install scsi-target-utils iscsi-initiator-utils 功能说明:scsi-target-utils:用来将 Linux 系统 ...
最新文章
- Windows下完成端口移植Linux下的epoll
- H5js的一些好玩的东西
- P3911 最小公倍数之和 (atcoder C - LCMs)(反演)
- 我向面试官讲解了单例模式,他对我竖起了大拇指
- ORACLE 正值表达式
- 运用计算机计算电力系统潮流分布时,电力系统【第四章:复杂电力系统潮流分布的计算机算法】...
- Linux中使用定时任务每周定时清理45天以前日志
- python变量赋值方式_【Python入门学习】详谈python变量和变量赋值语句
- C语言程序设计 学习笔记
- mysql怎么导入sql文件_如何将sql文件导入mysql
- 70多套java必练项目,适合小白上手!
- 复制iPhone端百度网盘下载好的视频到电脑(Mac / Windows)- iOS 12.4
- 机器学习中,矩阵转置的求导运算
- “美国人工智能倡议”解读
- CF 1383/1384
- mysql 申花球队面试题_mysql面试题练习01
- 微软Google人才战主角首次开口:Google让我震撼(转)
- 桌面小部件Wight父类AppWidgetProvider的三个方法
- html文字发亮_css实现发光文字及一点点js特效
- varclus变量聚类对变量有啥要求_「SPSS数据分析」SPSS聚类分析(K-均值聚类)软件操作结果解读...
热门文章
- P2P多线程断点续传的实现(转自PPcn)
- python入门函数编程_Python入门——面向函数的编程,过程
- java实现kfc点餐系统
- 【学习篇】【C++】【函数对象】
- 计算机网路原理与应用试题,2018年10月全国自考 04741计算机网络原理历年真题试题及答案...
- 【已解决】未解决-mimikatz尝试获取win10明文口令报错
- python12306登录_python 手动验证并模拟登录12306
- 11-2犀牛读书笔记
- 计算机科技手抄报内容,科技手抄报内容怎么写
- 无人驾驶实战第二课--七月在线