SpringBoot单元测试之mock静态方法
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 需要注意的问题
有时候单个方法测试可以通过,但是整个测试类一直运行时通不过,powermock
和mockito
版本适配如下:
SpringBoot单元测试之mock静态方法相关推荐
- java单元测试之mock篇
java单元测试之mock篇 一.什么是mock? 二.为什么要进行mock? 三.IDEA中使用Mock 3.1.引入mock所需依赖 3.1.IDEA单元测试必备快捷键 3.2.Mock测试相关注 ...
- 补习系列(8)-springboot 单元测试之道
目录 目标 一.About 单元测试 二.About Junit 三.SpringBoot-单元测试 项目依赖 测试样例 四.Mock测试 五.最后 目标 了解 单元测试的背景 了解如何 利用 spr ...
- Java单元测试之Mock框架
一.引言 二.为什么要用Mock 三.Mock使用场景 四.Mock定义 五.Mock框架 五.Mockito 5.1 Mockito基本使用 5.2 MockMVC测试 5.2.1 初始化MockM ...
- 单元测试之mock使用
目录 一.简介 二.使用mock做单元测试的优点 1.效率高 2.TDD(测试驱动开发) 3.并行开发 4.解决环境依赖问题 三.mock实现原理 四.mock使用 1.导入Maven依赖包 2.编写 ...
- java单元测试之Mock测试编写
mock框架官方文档地址:https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/Mockito.html#verif ...
- Java单元测试之模拟利器-使用PowerMock进行Mock测试
首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...
- SpringBoot单元测试Mock静态方法
这两天写单元测试碰到了一个问题,就是这个subnetmap里面的数据格式我不知道是怎么样的,所以直接mock掉返回自己指定的值吧. mockito库并不能 mock静态方法,需要依赖powermock ...
- Java单元测试之JUnit4详解
2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...
- Java基础学习总结(24)——Java单元测试之JUnit4详解
Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before ...
最新文章
- 新电脑装不了win7?来试试我的方法!
- Ubuntu10.10源
- 展望未来:使用 PostCSS 和 cssnext 书写 CSS
- mysql视图_mysql之视图详解
- boost::qvm::is_scalar相关的测试程序
- python 利用pandas库实现 读写 .csv文件
- 面向 Visual Studio 开发者的 Git 内部源代码
- vue 一个组件内多个弹窗_论如何用Vue实现一个弹窗-一个简单的组件实现
- ajax 输入不为空,ajax POST响应为空
- JAVA进阶级开发之(Array工具类)
- 学习Spring Boot:(二十三)Spring Boot 中使用 Docker
- C++|Qt工作笔记-对explicit的认识(Qt中一般情况下为什么会自动加上这个关键字)
- 程序设计与算法----递归之放苹果问题
- [BZOJ3456]城市规划
- tp5.0 百度编辑器上传图片到阿里云oss
- 2019字节跳动实习面试
- MTK 驱动(61)---MT6737 Android N 平台 ----ALSA Driver
- 英语从句(英语兔学习笔记)
- 动态规划的应用(二):cutting stock 问题
- python中的英文歌_Python 爬网易音乐云歌曲,MV
热门文章
- Mac 使用brew 安装工具报错 Your CLT does not support macOS 11
- jQuery实现的无缝轮播图
- 蚂蚁森林能量java_使用autojs实现自动拾取蚂蚁森林能量与偷取朋友能量
- 其实,微信没有封哨权
- 三角形的内切圆和外接圆--【英雄会】
- 华为荣耀android进入,华为荣耀 进入工程模式的方法
- DB2ADVIS returning error -220
- Docker Desktop 如何运行第一个 Docker 项目
- 北风修仙笔记—2020年8月
- Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共