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. 新电脑装不了win7?来试试我的方法!
  2. Ubuntu10.10源
  3. 展望未来:使用 PostCSS 和 cssnext 书写 CSS
  4. mysql视图_mysql之视图详解
  5. boost::qvm::is_scalar相关的测试程序
  6. python 利用pandas库实现 读写 .csv文件
  7. 面向 Visual Studio 开发者的 Git 内部源代码
  8. vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现
  9. ajax 输入不为空,ajax POST响应为空
  10. JAVA进阶级开发之(Array工具类)
  11. 学习Spring Boot:(二十三)Spring Boot 中使用 Docker
  12. C++|Qt工作笔记-对explicit的认识(Qt中一般情况下为什么会自动加上这个关键字)
  13. 程序设计与算法----递归之放苹果问题
  14. [BZOJ3456]城市规划
  15. tp5.0 百度编辑器上传图片到阿里云oss
  16. 2019字节跳动实习面试
  17. MTK 驱动(61)---MT6737 Android N 平台 ----ALSA Driver
  18. 英语从句(英语兔学习笔记)
  19. 动态规划的应用(二):cutting stock 问题
  20. python中的英文歌_Python 爬网易音乐云歌曲,MV

热门文章

  1. Mac 使用brew 安装工具报错 Your CLT does not support macOS 11
  2. jQuery实现的无缝轮播图
  3. 蚂蚁森林能量java_使用autojs实现自动拾取蚂蚁森林能量与偷取朋友能量
  4. 其实,微信没有封哨权
  5. 三角形的内切圆和外接圆--【英雄会】
  6. 华为荣耀android进入,华为荣耀 进入工程模式的方法
  7. DB2ADVIS returning error -220
  8. Docker Desktop 如何运行第一个 Docker 项目
  9. 北风修仙笔记—2020年8月
  10. Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共