SpringBoot单元测试之mock静态方法

2023-11-10

1 为什么要对静态方法mock

mockito库并不能 mock静态方法,需要依赖powermock才能对静态方法mock

2 如何使用powermock对静态方法mock

2.1 添加依赖

顺便添加对JsonPath的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <properties>
    <powermock.version>1.7.0RC4</powermock.version>
    <mockito.version>2.7.5</mockito.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
      <version>2.4.0</version>
      <scope>test</scope>
    </dependency>
    <!-- powermock -->
    <!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito -->
    <dependency><!-- 如果不是springboot,不需要加这个 -->
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-core</artifactId>
        </exclusion>
      </exclusions>
      <scope>test</scope>
    </dependency>
    <!-- powermock -->
    <!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito -->
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito2</artifactId>
      <version>${powermock.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-core</artifactId>
        </exclusion>
      </exclusions>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4 -->
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4-rule -->
    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4-rule</artifactId>
      <version>${powermock.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-core</artifactId>
        </exclusion>
      </exclusions>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>${mockito.version}</version><!--$NO-MVN-MAN-VER$-->
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>nef-server</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

2.2 编写测试类

前提:junit用的是4.12
工具类

public class IDUtil {

    public static String getSubscriptionId() {
        String localhost = NetUtil.getLocalhostStr();
        log.info("获取到的本地URL是:{}", localhost);
        return IdUtil.getSnowflake(Math.abs(localhost.hashCode()) % 32,
                Math.abs(localhost.hashCode()) % 32).nextIdStr();
    }
}

测试类

/**
 * <p>事件订阅测试类</p>
 *
 * @Author: lid
 * @Date: 2020-08-19
 */
@RunWith(PowerMockRunner.class) // 步骤1
@PowerMockRunnerDelegate(SpringRunner.class)// 步骤2
@PowerMockIgnore( {"javax.management.*", "javax.net.*"})// 步骤3
@PrepareForTest(IDUtil.class)// 步骤4:指定提前mock哪个类
@SpringBootTest()
public class HelloTest {
    @Autowired(required = true)
    private WebApplicationContext webApplicationContext;

    @Autowired(required = false)
    private MockMvc mockMvc;

 	@Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); //步骤5
        PowerMockito.mockStatic(IDUtil.class);
    }
    
	@Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
        PowerMockito.mockStatic(IDUtil.class);// 步骤6
    }
}

测试结果

打印结果:
hello

2.3 需要注意的问题

有时候单个方法测试可以通过,但是整个测试类一直运行时通不过,powermockmockito版本适配如下:
在这里插入图片描述

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

SpringBoot单元测试之mock静态方法 的相关文章

  • MVC架构

    10 MVC 什么是MVC Model view Controller 模型视图控制器 10 1 以前的架构 用户可以直接访问控制层 控制层可以直接操作数据库 Servlet gt CURD gt 数据库 弊端 程序十分臃肿 不利于维护 S
  • Java-String类的常用方法

    Java String类的常用方法 1 常用方法1 int length 返回字符串的长度 return value length char charAt int index 返回某索引处的字符return value index bool
  • JAVA多人聊天室(多线程基础聊天室可以私聊/群聊)

    创建一个类定义聊天的规则 package com test tcpmap 该程序定义了聊天的规则 public interface CrazyitProtocol 定义协议字符串的长度 int PROTOCOL LEN 2 下面是一些协议字
  • Maven、pom.xml

    maven库中心 Maven Central Repository Search 搜索可以用的包与版本 目录 Maven 使用方法 1 下载 配置 2 项目中使用 3 生命周期 4 构建插件 MAVEN工程 的目录结构 父子项目 创建父项目
  • java基础知识

    java基础知识 java是一门编程语言 面向对象 是一门开源的计算机语言 曾用名Oak java市场需求 市面比较广 面向对象 可以开发的方面比较多 主要是是应用方面 android app 软件工具 微信小程序 大数据分析 当今社会上手
  • java基础语法

    java基础语法 1 Java概述 1 1 Java语言发展史 了解 1 2 Java语言跨平台原理 理解 1 3 JRE和JDK 记忆 1 4 JDK的下载和安装 应用 1 4 1 下载 1 4 2 安装 1 4 3 JDK的安装目录介绍
  • 在centos7中安装docker

    一 前置条件 64 bit 系统 kernel 3 10 CentOS 7 1 检查 使用 uname r 检查 kernel 版本 uname r 3 10 0 327 el7 x86 64 二 安装 yum安装方式 1 使用 sudo
  • Java 基础系列(十六) --- Java中模板引擎的使用

    模板引擎 1 关于动态页面的渲染 2 非模板引擎的弊端 3 模板引擎 3 1 什么是模板引擎 3 2 Thymeleaf 语法 3 3 模板引擎的使用 4 总结 1 关于动态页面的渲染 渲染就是把数据和页面进行结合起来 主要分为服务器渲染和
  • eclipse 环境配置第一个webapp的发布 及jsp代码的执行

    GBK 所有中文操作系统默认的编码 UTF 8 支持识别各个国家的字符 但这样 之前的代码如果用的是GBK编码 则会变成乱码 我们可以建一个新的工作区 新建一个文件夹 存放workspace 选择workspace位置后 等待重启 以后再建
  • 多线程(九):JUC组件

    在来时juc组件前 我们先把上一章遗漏的部分给补上 synchronized 实现策略 锁升级 无锁 gt 偏向锁 gt 轻量级锁 gt 重量级锁 还有一个 锁消除 锁消除即删除不必要的加锁操作 JVM在运行时 对一些 在代码上要求同步 但
  • Response响应方法详解

    Response 响应 服务器把请求的处理结果告知客户端 在B S架构中 响应就是把结果带回浏览器 响应对象 在项目中用于发送响应的对象 常用状态码 状态码 说明 200 执行成功 302 它和307一样 都是用于重定向的状态码 只是307
  • 分配操作菜单

    目录 概述 介绍 数据库 后端 前端 效果展示 概述 在写后台管理系统时 我们可以根据不同的登录人 给予不同的功能菜单 如 给楼栋管理员登录时分配 楼栋管理 宿舍管理 所以在数据库就要创建 1 登录人与角色表 2再给角色表分配操作菜单 登录
  • @Resource注解是什么作用,和@bean区别是什么?

    Resource 注解就像是 Java 开发的快递小哥 专门用来送依赖关系到你的代码门口 它的主要工作就是帮你实现依赖注入 把其他组件 比如类 对象 bean 啥的 送到你需要的地方 具体来说 依赖注入 Resource 负责把其他组件注入
  • 基于Java EE架构的汽车车辆管理系统设计与实现-计算机毕业设计源码68424

    摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代 在现实运用中 应用软件的工作规则和开发步
  • 【计算机开题报告】家具销售库存管理信息系统

    一 选题的目的 意义及相关研究动态和自己的见解 随着当今社会信息化的发展 电子自动化办公越来越为各人所重视 它能有效地收集 处理各种信息 极大地提高了办事效率 而计算机技术各种软件工作平台不断的发展 又为电子自动化办公的实现提供了良好的前景
  • 【计算机毕业设计】出租车管理系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本出租车管理系统就是在这样的大环境下诞生 其可以帮助管理者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人
  • 【计算机毕业设计】电商个性化推荐系统

    伴随着我国社会的发展 人民生活质量日益提高 于是对电商个性化推荐进行规范而严格是十分有必要的 所以许许多多的信息管理系统应运而生 此时单靠人力应对这些事务就显得有些力不从心了 所以本论文将设计一套电商个性化推荐系统 帮助商家进行商品信息 在
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【计算机毕业设计】北京医疗企业固定资产管理系统的设计与实现 _4c4c1

    近年来 人们的生活方式以网络为主题不断进化 北京医疗企业固定资产管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工

随机推荐

  • 处理点云数据(一):点云与生成鸟瞰图

    点云数据 点云数据一般表示为N行 至少三列的numpy数组 每行对应一个单独的点 所以使用至少3个值的空间位置点 X Y Z 来表示 如果点云数据来自于激光雷达传感器 那么它可能有每个点的附加值 在KITTI数据中就有一个 反射率 这是衡量
  • blockly开始使用

    开始使用 本文档面向希望创建自己的应用程序的开发人员 这些应用程序将Blockly集成为代码编辑器 假定人们通常熟悉Blockly的用法 并且对HTML和JavaScript有基本的了解 总览 Blockly旨在轻松安装到您的Web应用程序
  • fcm算法的MATLAB实现

    fcm算法 分析 1 算法中包含的参数 a 模糊因子expo expo gt 1 b 最大迭代次数max t c 迭代终止条件 2 算法中包含的过程 a 目标函数 b 欧式距离 c 隶属矩阵 d 聚类中心 e 迭代过程 还有 不要忘记 初始
  • Linux学习--进程创建

    进程创建 在Linux系统下 自己可以创建进程 当进程执行时 它会被装载进虚拟内存 为程序变量分配空间 并把相关信息添到 task struct里 进程内存布局分为四个不同的段 文本段 包含程序的源指令 数据段 包含了静态变量 堆 动态内存
  • 【2019蓝桥杯国赛B组】排列数

    这道题的思路就是从 i i i个数的情况推到 i 1 i 1 i 1个数的情况 首先设
  • visio显示形状窗口

    我们在打开已经创建好的visio文件经常会发现没有显示形状窗口 这对我们后续对文件的操作带来了极大的不便 比如 你想要对该文件进行修改编辑 添加其他形状控件等操作 解决方法如下图所示 步骤 找打视图选项 点击任务窗口 结果 这样 你以往创建
  • Devonthink 3 pro 多设备文件同步配置,不需要 iCloud,使用 webdav

    首先你需要申请一个网盘 日本的Teracloud https teracloud jp 网盘非常好用 有15g 空间 基本够用 10G原始空间 比坚果的大多了 领取额外5G 空间 输入我的邀请码 PV3EL 还可以额外领取5g 空间 申请步
  • 如何在IT技术面试中脱颖而出?

    前序 在竞争激烈的IT领域 技术面试是进入理想工作的关键一步 然而 要在面试中脱颖而出 您需要更多的准备和策略 以下是一些实际且深入的方法 可以帮助您在IT技术面试中脱颖而出 准备和策略 确保深入了解公司和职位 在面试前 彻底了解公司和职位
  • 第十一届蓝桥杯b组省赛真题解析

    试题C 合并检测本题总分 10分 问题描述 新冠疫惜由新冠病毒引起 最近在A国蔓延 为了尽快控制疫情 A国准备给大量民众进病毒核酸检测 然而 用于检测的试剂盒紧缺 为了解决这一困难 科学家想了一个办法 合井检测 即将从多个人 k个 采集的标
  • python特殊函数__class__()

    1 class 属性 class 是是实例的一个属性 指向实例所属的类 如使用 self class 表示self这个实例所属的类 2 self classs name self classs 表示self这个实例所属的类 name 则是类
  • 华为ensp模拟校园网/企业网实例(XX学校网络设计与实现)

    目录 1 网络需求分析 1 1 功能需求分析 1 2 技术需求分析 1 3 网络安全需求分析 2 校园局域网设计 2 1 拓扑图 2 2 IP 规划和 VLAN 划分 2 3 核心层设备配置 2 3 2 ospf配置 2 3 3 ACL访问
  • STM32编译报错

    今天将STM32CUBEMX进行整理编译后报错 charge shelf charge shelf axf Error L6200E Symbol SystemInit multiply defined by system stm32f4x
  • 量化投资学习-16:从波粒二象性和叠加原理看股票的三面:市场面、基本面、技术面

    市场上股票的运行走向千奇百样 但通过分析 其实每只股票都有其内在的相似的运行规律 以下 根据光波的波粒二象性和叠加性原理 通过图示的方式展现这种内在走势的共同规律 基本面是股票的核心 决定了股票的长期的价值回归点 这就是股票的粒子性上 市场
  • QTextEdit如何获取鼠标点击位置的行列值和行内容

    QTextEdit如何获取鼠标点击位置的行列值和行内容 void MainWindow on textEdit cursorPositionChanged int row col QTextCursor cursor QString str
  • 一个完整的机器学习项目实战代码+数据分析过程:哈佛大学能耗预测项目(Prediction of Buildings Energy Consumption)

    目录 哈佛大学能耗预测项目 背景介绍 数据采集 探索性数据分析 预测模型 机器学习方法 总结和结论 项目资料获取 https download csdn net download github 38486975 11120922 其他获取方
  • C++通过命令参数读文件

    老师奇奇怪怪的 要求 数据文件名通过命令参数的方式提交给应用程序 数据文件名不能写在程序中 在网上搜了一些相关的博客比较少 成功后记录如下 一 写在前面 argc argument count 表示传入main函数的参数个数 argv ar
  • 掌握Python的X篇_37_类的实例化、类方法

    上篇我们已经学习了python中的类 并且学习到可以通过class关键字定义类 而类的最基本特性就是它是一个名称空间 本篇将会学习类的实例化 文章目录 1 类的实例化 1 1 init 函数 1 2 实例化流程 2 类方法与成员 1 类的实
  • Sql Server 日期查询

    当前月 USE DBName Go Use Database Declare Variables DECLARE ReportGenerationDate DATE DECLARE ReportMonth INT DECLARE Repor
  • freertos实用指南_大数据及其掌握方法(实用指南)

    freertos实用指南 随着技术的兴起 数十年来 来自人 企业和机器的数字信息呈指数增长 数据现在被认为是21世纪的石油 几十年前产生兆字节数据的组织现在每小时产生PB级新数据 例如 全球超过33亿智能手机用户 大数据介绍 每个人都在数以
  • SpringBoot单元测试之mock静态方法

    The article summary 1 为什么要对静态方法mock 2 如何使用 powermock 对静态方法 mock 2 1 添加依赖 2 2 编写测试类 2 3 需要注意的问题 1 为什么要对静态方法mock mockito库并