Springboot测试类之@RunWith注解

2023-10-28

@runWith注解作用:
--@RunWith就是一个运行器
--@RunWith(JUnit4.class)就是指用JUnit4来运行
--@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环 境,以便在测试开始的时候自动创建Spring的应用上下文
--@RunWith(Suite.class)的话就是一套测试集合  

引申:
Spring Boot 1.5.2 Junit测试
使用 Spring 进行单元测试

 

方法1:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableAutoConfiguration
public class BBTestAA {
    @Autowired
    private TestRestTemplate testRestTemplate;

    //Application.class 为SpringBoot的启动入口类,每个SpringBoot项目大家都会配置
}

 

如果pom.xml中有如下代码,这行@RunWith(SpringRunner.class)就不会出现SpringRunner,反而有@RunWith(SpringJUnit4ClassRunner.class)

<!--spring-test测试=-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>

如果pom.xml中没有这段,则@RunWith(SpringRunner.class)不会报错。如果有这段:①未注释<scope>test</scope>会报错;②注释<scope>test</scope>不会报错

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>1.5.9.RELEASE</version>
    <scope>test</scope>
</dependency>

总结起来,想要使用

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)

pom.xml中应该引用这两个

<!--spring-test测试=-->
        <!--<dependency>-->
            <!--<groupId>org.springframework</groupId>-->
            <!--<artifactId>spring-test</artifactId>-->
            <!--<version>4.2.4.RELEASE</version>-->
        <!--</dependency>-->

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>1.5.9.RELEASE</version>
            <!--<scope>test</scope>-->
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--<scope>test</scope>-->
        </dependency>

<!--spring-test测试=-->
        <!--<dependency>-->
            <!--<groupId>org.springframework</groupId>-->
            <!--<artifactId>spring-test</artifactId>-->
            <!--<version>4.2.4.RELEASE</version>-->
        <!--</dependency>-->

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>1.5.9.RELEASE</version>
            <!--<scope>test</scope>-->
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--<scope>test</scope>-->
        </dependency>

 

方法2:
如果有<scope>test</scope>@RunWith报红,没有<scope>test</scope>会引入该类

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

如果有<scope>test</scope>@SpringBootTest报红,没有<scope>test</scope>会引入该类

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-test</artifactId>
    <version>1.5.9.RELEASE</version>
    <scope>test</scope>
</dependency>

 

如果是<version>4.2.4.RELEASE</version>SpringRunner报红,如果<version>4.2.4.RELEASE</version>会引入该类

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>

 

所以最后要正确使用,需引入这些架包

<!--spring-test测试=-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>1.5.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

 

2.在IDE中新增JunitTest类

@RunWith(SpringRunner.class) //14.版本之前用的是SpringJUnit4ClassRunner.class
@SpringBootTest(classes = Application.class) //1.4版本之前用的是//@SpringApplicationConfiguration(classes = Application.class)
public class SystemInfoServiceImplTest {

        @Autowired
        private ISystemInfoService systemInfoservice;

        @Test
        public void add() throws Exception {
        }

        @Test
         public void findAll() throws Exception {
         }

}

 

主要是注解的更改,如果注解用的不对,会报各种奇怪的问题,例如applicationContext找不到,datasource实例化失败等等。

3, 为了支持上面两个注解,maven文件中要用对依赖以及版本,我当时添加SpringRunner.class所在的依赖jar时,由于用了idea的auto-imported,IDE自动导入了版本是3.x的,实际应该导入4.x,我一直以为idea导入的是正确的,导致在这上面费时颇多,后来我手工写入就解决了。是正确的spring boot test的maven依赖

<!--spring-test测试=-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>1.5.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot测试类之@RunWith注解 的相关文章

  • 当SpringCloud微服务发生线程隔离(舱壁模式)和熔断降级时(微服务失败的回调),利用FeignClient整合Sentinel,返回用户一个友好提示或者默认结果

    目录 一 线程隔离 1 1线程隔离的两种实现方式 二 熔断降级 2 1慢调用 2 2异常比例 2 3异常数 三 FeignClient整合Sentinel 3 1修改配置 开启sentinel功能 3 2编写失败降级逻辑 3 2 1利用Fa
  • 定时任务及分布式定时任务注意事项

    一 定时任务默认是阻塞的 定时任务默认是阻塞的 即串行执行 若一个服务配置多个定时任务 需要等上一个定时任务执行完 才能执行下一个定时任务 一个定时任务超长了 也不应该阻塞其他定时任务的执行 如一个定时任务每秒执行 而业务执行时间是5秒 那
  • 全链路压测的“谜”

    前言 对于性能测试来说 全链路压测肯定跑不了的 在昨天上午的 GIAC全球互联网架构大会 上 网易云就进行了全链路压测的议题 对于有性能测试的公司来说 面试往往会被问到什么是全链路压测 如何有效的开展全链路压测等等 我今天也只是高屋建瓴 站
  • Admin监控&Sleuth链路追踪 &skywalking链路追踪

    Admin监控 Sleuth链路追踪 skywalking Sleuth Zipkin 一 Sleuth Zipkin介绍 二 搭建环境 三 Sleuth入门操作 四 Zipkin搭建及操作 五 RabbitMQ方式发送信息 六 Elast
  • TreeMap 的特点

    TreeMap基于红黑树实现 增删改查的平均和最差时间复杂度均为O 最大特点时Key有序 key必须实现Comparable接口或者提供Comparator比较器 所以key不允许为null HashMap 依靠hashCode和equal
  • spring boot配置类注册深入解析

    前言 spring ApplicationContext的刷新总体来看有两个过程 第一个是注册BeanDefinition 提供整个IOC容器初始化的材料 第二个是根据BeanDefinition加载bean 从spring boot开始
  • SpringCluod深入教程

    1 Nacos配置管理 Nacos除了可以做注册中心 同样可以做配置管理来使用 1 1 统一配置管理 当微服务部署的实例越来越多 达到数十 数百时 逐个修改微服务配置就会让人抓狂 而且很容易出错 我们需要一种统一配置管理方案 可以集中管理所
  • Go 语言进阶(一) -- Go hertz http框架、kitex RPC微服务框架、gorm 数据库框架三件套用法详解

    Go 框架三件套 1 概论 Gorm Gorm 是一个已经迭代了10年 的功能强大的 ORM框架 在字节内部被广泛使用并且拥有非常丰富的开源扩展 Kitex Kitex 是字节内部 Golang 微服务 RPC 框架 具有高性能 强可扩展的
  • 从零开始实现基于go-zero框架的微服务电商项目(二)——User服务的基础搭建

    从零开始实现基于go zero框架的微服务电商项目 二 User服务的基础搭建 项目地址 liuxianloveqiqi XianShop 使用go zero搭建的电商项目 github com API 首先在api包下新建user api
  • Thrift、Dubbo、Spring Cloud 和 gRPC

    何为RPC RPC Remote Procedure Call 远程过程调用 是一种进程间通信方式 是一种技术的思想 而不是规范 它允许程序调用另一个地址空间 通常是共享网络的另一台机器上 的过程或函数 而不用程序员显式编码这个远程调用的细
  • SpringCloudGateway路由策略:Nacos同集群优先

    使用版本
  • 如果老板要求你的系统接入春晚大流量活动,你会心慌慌吗?

    目录 回头看看 原始系统技术架构 基于CDN的活动静态页面缓存方案 基于Nginx Tomcat Redis的多级缓存方案 超高并发写请求RocketMQ削峰填谷方案 系统限流防雪崩体系架构方案 今天给大家分享一个话题 就是如果要是你老板突
  • Ribbon负载均衡策略DynamicServerListLoadBalancer的ServerListFilter解读

    一 DynamicServerListLoadBalancer在类图中的位置 二 DynamicServerListLoadBalancer源码解读 1 关键代码请见注释 2 源码位置 ribbon master ribbon loadba
  • java脚本引擎Groovy实战

    前言 互联网时代随着业务的飞速发展 不仅产品迭代 更新的速度越来越快 个性化需求也是越来越多 如何快速的满足各种业务的个性化需求是我们要重点思考的问题 我们开发的系统如何才能做到热部署 不重启服务就能适应各种规则变化呢 实现业务和规则的解耦
  • SpringCloud概述

    SpringCloud概述 1 SpringCloud是什么 2 SpringCloud和SpringBoot关系 3 Dubbo和SpringCloud技术选型 4 SpringCloud作用 1 SpringCloud是什么 现代化的J
  • spring security oauth2 动态切换角色或者岗位,更新redis缓存

    1 切换角色或者岗位后更新缓存token 获取token 并更新token 特别要注意token中的内容 accessToken getAdditionalInformation put SecurityConstants DETAILS
  • 深入微服务架构 | 微服务与k8s架构解读

    微服务项目架构解读 什么是微服务 微服务是指开发一个单个小型的但有业务功能的服务 每个服务都有自己的处理和轻量通讯机制 可以部署在单个或多个服务器上 微服务也指一种种松耦合的 有一定的有界上下文的面向服务架构 也就是说 如果每个服务都要同时
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • DockerCompose - 微服务项目部署全过程(最佳实践)

    目录 一 微服务项目部署 1 1 项目介绍 1 2 准备 MySQL 初始化文件 1 3 pom xml 插件 1 4 测试工作 1 5 编写 Dockerflie 文件 1 6 编写 DockerCompose yml 文件 1 7 修改

随机推荐

  • Unity摄像机屏幕上画线(逐步完善)

    1 类似于星际公民用于飞船控制的线 从屏幕中心开始 鼠标位置结束 将下面脚本挂载至摄像机 using System Collections using System Collections Generic using System Thre
  • 在ESXi界面给虚拟机配的内核数与虚机内任务管理器显示数不一致

    source esxi6 7设备管理器中的cpu核数和任务管理器中的不一致 esxi吧 百度贴吧 ESXi里给某台win10虚机配置了16核cpu 但在此虚机里面的任务管理器里却只看到2个核心 原因在下图 把CPU和和每个插槽内核数改成一样
  • JavaSE学习 day01

    今天是学习JavaSE的第一天 首先 我先初识了Java 了解了学习目标 知道了什么是程序 什么是Java 为什么学习Java 然后 学习了搭建Java开发环境 1 安装JDK 2 配置环境变量 这里要注意 JDK java开发工具包 JR
  • JS中的函数-内部函数,子调用函数和返回值为函数的函数

    自调用函数 Self invoking Functions 自调用函数也是匿名函数的一种表现形式 这个函数在定义之后 直接调用 如下 function alert haha 看起来还挺怪异 不过确实很简单 自调用函数很方便使用 可以不用定义
  • 多个Node.js版本之间切换

    本篇文章会讲windows和Mac系统下实现多个node js版本之间的切换 1 windows下采用nvm nvm window 2 Mac下采用nvm和n 注 window和mac下的nvm地址是不一样的 一 windows系统 什么是
  • JDK 8 / JDK 1.8 压缩包

    文章大概 因为JDK8在官网是直接的一个exe可运行程序 并没有压缩包 而网络上有别人准备的压缩包 看到是某度盘直接放弃 所以这篇文章教大家自己来搞一个JDK8的压缩包文件 开始操作 在操作之前 你需要去Java Downloads Ora
  • 对象转JSONObject——字段空值处理方法

  • uniapp 发布微信小程序分包

    1 进入下列文件 进入 unpackage dist build mp weixin app json pages pages index index pages login login pages views WearCutData We
  • 十个漂亮的数学定理赏析

    原地址 十个漂亮的数学定理赏析 Beauty is the first test there is no permanent place in the world for ugly mathematics G H Hardy 科学家研究自然
  • MYSQL--基础--11--join理解

    MYSQL 基础 11 join理解 1 数据初始化 SET FOREIGN KEY CHECKS 0 Table structure for course DROP TABLE IF EXISTS course CREATE TABLE
  • GPT,GPT-2,GPT-3

    视频讲解 GPT GPT 2 GPT 3 论文精读 论文精读 哔哩哔哩 bilibili 论文链接 GPT https www cs ubc ca amuham01 LING530 papers radford2018improving p
  • JUC学习系列八(信号量 Semaphore)

    一个计数信号量 从概念上讲 信号量维护了一个许可集 Semaphore 通常用于限制可以访问某些资源 物理或逻辑的 的线程数目 通常 应该将用于控制资源访问的信号量初始化为公平的 以确保所有线程都可访问资源 为其他的种类的同步控制使用信号量
  • 学习 Python 数据结构与算法,这是我见过最友好的教程

    Pascal 之父 Nicklaus Wirth 曾说 程序 数据结构 算法 在 算法 第4版 中 作者也说过 数据结构和算法的学习是计算机科学和软件工程领域的基础 它们对于解决实际问题和优化程序性能至关重要 数据结构与算法的重要性不言而喻
  • 资源共享——《嵌入式Linux应用开发完全手册》韦东山 PDF电子档下载

    嵌入式Linux应用开发完全手册 经典的Linux驱动入门书籍
  • 学习笔记-架构的演进之k8s的存储扩展架构-3月day10

    文章目录 前言 Kubernetes 存储架构 FlexVolume 与 CSI FlexVolume CSI 从 In Tree 到 Out of Tree 附 前言 容器存储具有很强的多样性 如何对接后端实际的存储系统 并且完全发挥出它
  • 2022CTFSHOW菜狗杯部分MISC(一)

    11 14WP MISC 迷之栅栏 ctfshow 010editor文件比较 解压附件得到2张图 用010打开 使用比较文件功能 查看两个图片的十六进制字符串不同的部分 cfhwfaab2cb4af5a5820 tso 06071f997
  • 领鹿谷资讯:量化的收益,让你意想不到

    从事这行业久了 总是会被问及到的众多问题 也都是千篇一律的 比如 我该怎么做 学什么 怎样才能盈利 你们是用什么方法 可以带着我做吗 为什么我总选不对品种 方向 是不是你们能预测行情 你们有什么消息 能不能下次也告诉我 其实每一个阶段的投资
  • 解决Windows中d3dcompiler_39.dll缺少问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 39 dll文件进行安装
  • python判断数是整数还是小数

    a 98 5 s str a split if float s 1 0 print 整数 else print 小数 数转化为字符串并通过split在小数点处分割形成一个列表 转化为浮点型后我们只需要判断s 1 是否为0就可以看出a是否为小
  • Springboot测试类之@RunWith注解

    runWith注解作用 RunWith就是一个运行器 RunWith JUnit4 class 就是指用JUnit4来运行 RunWith SpringJUnit4ClassRunner class 让测试运行于Spring测试环 境 以便