The article summary

  • 1 为什么要对静态方法mock
  • 2 如何使用`powermock`对静态方法`mock`
    • 2.1 添加依赖
    • 2.2 编写测试类
    • 2.3 需要注意的问题

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;@Beforepublic void setUp() {mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); //步骤5PowerMockito.mockStatic(IDUtil.class);}@Beforepublic void setUp() {mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();PowerMockito.mockStatic(IDUtil.class);// 步骤6}
}

测试结果

打印结果:
hello

2.3 需要注意的问题

有时候单个方法测试可以通过,但是整个测试类一直运行时通不过,powermockmockito版本适配如下:

SpringBoot单元测试之mock静态方法相关推荐

  1. java单元测试之mock篇

    java单元测试之mock篇 一.什么是mock? 二.为什么要进行mock? 三.IDEA中使用Mock 3.1.引入mock所需依赖 3.1.IDEA单元测试必备快捷键 3.2.Mock测试相关注 ...

  2. 补习系列(8)-springboot 单元测试之道

    目录 目标 一.About 单元测试 二.About Junit 三.SpringBoot-单元测试 项目依赖 测试样例 四.Mock测试 五.最后 目标 了解 单元测试的背景 了解如何 利用 spr ...

  3. Java单元测试之Mock框架

    一.引言 二.为什么要用Mock 三.Mock使用场景 四.Mock定义 五.Mock框架 五.Mockito 5.1 Mockito基本使用 5.2 MockMVC测试 5.2.1 初始化MockM ...

  4. 单元测试之mock使用

    目录 一.简介 二.使用mock做单元测试的优点 1.效率高 2.TDD(测试驱动开发) 3.并行开发 4.解决环境依赖问题 三.mock实现原理 四.mock使用 1.导入Maven依赖包 2.编写 ...

  5. java单元测试之Mock测试编写

    mock框架官方文档地址:https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/Mockito.html#verif ...

  6. Java单元测试之模拟利器-使用PowerMock进行Mock测试

    首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...

  7. SpringBoot单元测试Mock静态方法

    这两天写单元测试碰到了一个问题,就是这个subnetmap里面的数据格式我不知道是怎么样的,所以直接mock掉返回自己指定的值吧. mockito库并不能 mock静态方法,需要依赖powermock ...

  8. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  9. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

最新文章

  1. python 贴吧自动回复机-python借助wxpy与图灵实现微信机器人自动回复消息
  2. Example of how to use both JDK 7 and JDK 8 in one build.--reference
  3. 画原型前需要思考的一些事(上)
  4. php去除数组中的第一个元素,php如何删除数组的第一个元素和最后一个元素
  5. Tomcat和IntelliJ –在webapps文件夹之外部署war文件
  6. mysql建表时主键_mysql建表时怎么设置主键?
  7. spring学习(41):属性注入
  8. linux数组长度的函数,linux awk数组操作详细介绍
  9. SPOJ9534 JZPLIT - Turn on the lights(高斯消元)
  10. 第十:Pytest中的yield操作
  11. 使用MybatisPlus在实体中添加数据库表中不存在的字段
  12. 国内学者新研究:中医AI登场,自动开出药方
  13. Java 使用反射 Class.forName() 报错java.lang.ClassNotFoundException 的解决办法
  14. window10计算机策略,如何打开组策略,教您win10如何打开组策略
  15. Activity启动流程(二)system_server进程处理启动Activity请求
  16. ubuntu14.04彻底卸载ibus安装fcitx拼音输入法
  17. 如何运用MATLAB实现K-MEANS聚类分析
  18. 我的世界服务器怎么做无限的弓,我的世界无限弓箭怎么做?
  19. Android 屏幕旋转 全解析
  20. C++STL开发温习与总结(六): 6.C++语言输入/输出流定义之输入/输出格式控制

热门文章

  1. excel最强教科书电子版_Excel最强教科书(完全版全彩印刷)
  2. 转行软件测试两年了,听大神说测试前途是IT里最low的,我慌了......
  3. three.js 纹理贴图的使用
  4. pandas.DataFrame.drop_duplicates后面inplace=True与inplace=False的区别
  5. Mysql常见面试题(进阶知识点)
  6. 【田姓】宗谱——【迁徙分布】
  7. Android自定义Drawable第十五式之啡常OK
  8. 【蓝桥杯】——键盘是使用
  9. NTP for Linux
  10. matlab中som结果,som 运行结果怎么看啊