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)?相关推荐

  1. LANDESK操作系统部署时,网卡启动后,自动进入pe选择菜单,而不用按F8 进行选择启动菜单的情况下,如何操作?...

    LANDESK操作系统部署时,网卡启动后,自动进入pe选择菜单,而不用按F8 进行选择启动菜单的情况下,如何操作? 设置方法: 使用PXE的控制队列 PXE的控制队列是另一个远程图像PXE的部署操作系 ...

  2. java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法

    最近一段时间都是在补之前的技术债,一直忙着写业务代码没有注重代码的质量,leader也在强求,所有要把单元测试搞起来了 我把单元测试分为两种 一个是service的单元测试,一个是controller ...

  3. SpringBoot2.1.5 (24): @SpringBootTest单元测试

    SpringBoot2.1.5 (24): @SpringBootTest单元测试 写测试用例  可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 可以自动测试,可以在项目打包前进行测试校验 ...

  4. 单元测试@Test+@RunWith(SpringRunner.class)

    什么是单元测试? 我们刚开始接触编程过程中使用最多的测试就是使用main方法,但是main方法测试每次测试都需要全部执行完,效率比较慢,如何测试一部分代码呢?那么就可以使用单元测试@Test来测试你需 ...

  5. 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  6. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...

    无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...

  7. 启动ipython出错_python-在异常情况下启动IPython shell

    python-在异常情况下启动IPython shell 当我的程序运行引发异常的行时,是否可以启动IPython Shell或提示? 我对引发异常的上下文,变量,范围(和子范围)最感兴趣. 类似于V ...

  8. linux如何启动文件夹,linux 下常见启动文件配置

    在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login或 ~/. ...

  9. linux6无法启动iscsi服务,RHEL6下安装配置ISCSI服务器

    1.安装所需软件: yum –y install scsi-target-utils iscsi-initiator-utils 功能说明:scsi-target-utils:用来将 Linux 系统 ...

最新文章

  1. Windows下完成端口移植Linux下的epoll
  2. H5js的一些好玩的东西
  3. P3911 最小公倍数之和 (atcoder C - LCMs)(反演)
  4. 我向面试官讲解了单例模式,他对我竖起了大拇指
  5. ORACLE 正值表达式
  6. 运用计算机计算电力系统潮流分布时,电力系统【第四章:复杂电力系统潮流分布的计算机算法】...
  7. Linux中使用定时任务每周定时清理45天以前日志
  8. python变量赋值方式_【Python入门学习】详谈python变量和变量赋值语句
  9. C语言程序设计 学习笔记
  10. mysql怎么导入sql文件_如何将sql文件导入mysql
  11. 70多套java必练项目,适合小白上手!
  12. 复制iPhone端百度网盘下载好的视频到电脑(Mac / Windows)- iOS 12.4
  13. 机器学习中,矩阵转置的求导运算
  14. “美国人工智能倡议”解读
  15. CF 1383/1384
  16. mysql 申花球队面试题_mysql面试题练习01
  17. 微软Google人才战主角首次开口:Google让我震撼(转)
  18. 桌面小部件Wight父类AppWidgetProvider的三个方法
  19. html文字发亮_css实现发光文字及一点点js特效
  20. varclus变量聚类对变量有啥要求_「SPSS数据分析」SPSS聚类分析(K-均值聚类)软件操作结果解读...

热门文章

  1. P2P多线程断点续传的实现(转自PPcn)
  2. python入门函数编程_Python入门——面向函数的编程,过程
  3. java实现kfc点餐系统
  4. 【学习篇】【C++】【函数对象】
  5. 计算机网路原理与应用试题,2018年10月全国自考 04741计算机网络原理历年真题试题及答案...
  6. 【已解决】未解决-mimikatz尝试获取win10明文口令报错
  7. python12306登录_python 手动验证并模拟登录12306
  8. 11-2犀牛读书笔记
  9. 计算机科技手抄报内容,科技手抄报内容怎么写
  10. 无人驾驶实战第二课--七月在线