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 ...
最新文章
- python 贴吧自动回复机-python借助wxpy与图灵实现微信机器人自动回复消息
- Example of how to use both JDK 7 and JDK 8 in one build.--reference
- 画原型前需要思考的一些事(上)
- php去除数组中的第一个元素,php如何删除数组的第一个元素和最后一个元素
- Tomcat和IntelliJ –在webapps文件夹之外部署war文件
- mysql建表时主键_mysql建表时怎么设置主键?
- spring学习(41):属性注入
- linux数组长度的函数,linux awk数组操作详细介绍
- SPOJ9534 JZPLIT - Turn on the lights(高斯消元)
- 第十:Pytest中的yield操作
- 使用MybatisPlus在实体中添加数据库表中不存在的字段
- 国内学者新研究:中医AI登场,自动开出药方
- Java 使用反射 Class.forName() 报错java.lang.ClassNotFoundException 的解决办法
- window10计算机策略,如何打开组策略,教您win10如何打开组策略
- Activity启动流程(二)system_server进程处理启动Activity请求
- ubuntu14.04彻底卸载ibus安装fcitx拼音输入法
- 如何运用MATLAB实现K-MEANS聚类分析
- 我的世界服务器怎么做无限的弓,我的世界无限弓箭怎么做?
- Android 屏幕旋转 全解析
- C++STL开发温习与总结(六): 6.C++语言输入/输出流定义之输入/输出格式控制
热门文章
- excel最强教科书电子版_Excel最强教科书(完全版全彩印刷)
- 转行软件测试两年了,听大神说测试前途是IT里最low的,我慌了......
- three.js 纹理贴图的使用
- pandas.DataFrame.drop_duplicates后面inplace=True与inplace=False的区别
- Mysql常见面试题(进阶知识点)
- 【田姓】宗谱——【迁徙分布】
- Android自定义Drawable第十五式之啡常OK
- 【蓝桥杯】——键盘是使用
- NTP for Linux
- matlab中som结果,som 运行结果怎么看啊