PowerMock学习(四)之Mock static的使用
我们编写代码的时候,总会写一些工具类,为了方便调用喜欢使用static关键字来修饰对应方法。
那么现在举例说明,还是准备两个接口,第一个是查询学生总数,第二个是新增学生两个接口,具体示例代码如下:
package com.rongrong.powermock.mockstatic; import com.rongrong.powermock.service.Student; /**
* @author rongrong
* @version 1.0
* @date 2019/11/23 8:08
*/
public class StudentStaticService { /**
* 获取学生总数
* @return
*/
public int getStudentTotal(){
return StudentUtils.getStudent();
} /**
* 创建一个学生
* @param student
*/
public void createStudent(Student student){
StudentUtils.createStudent(student);
}
}
接着我们再来看看这个静态工具类StudentUtils,具体代码示例如下:
package com.rongrong.powermock.mockstatic; import com.rongrong.powermock.service.Student; /**
* @author rongrong
* @version 1.0
* @date 2019/11/23 7:38
*/
public class StudentUtils {
/**
* 获取学生总数
* @return
*/
public static int getStudent(){
throw new UnsupportedOperationException();
} /**
* 创建一个学生
* @param student
*/
public static void createStudent(Student student){
throw new UnsupportedOperationException();
}
}
接下来我们用传统方式,来做单元测试,示例代码如下:
@Test
public void testGetStudnetTotal(){
StudentStaticService staticService = new StudentStaticService();
int studentTotal = staticService.getStudentTotal();
assertEquals(studentTotal,10);
} @Test
public void testCreateStudent(){
StudentStaticService staticService = new StudentStaticService();
staticService.createStudent(new Student());
assertTrue(true);
}
接着运行下测试用例,结果肯定报错了,为什么报错,这里就不再细说了,参考之前文章,报错,如下图所示:
接下来我们使用powermock来进行测试,具体示例代码如下:
@Test
public void testGetStudentWithMock(){
//先mock工具类对象
PowerMockito.mockStatic(StudentUtils.class);
//模拟静态类调用
PowerMockito.when(StudentUtils.getStudent()).thenReturn(10);
//构建service
StudentStaticService service = new StudentStaticService();
int studentTotal = service.getStudentTotal();
assertEquals(10,studentTotal);
} @Test
public void testCreateStudentWithMock(){
//先模拟静态工具类
PowerMockito.mockStatic(StudentUtils.class);
//模拟调用
PowerMockito.doNothing().when(StudentUtils.class);
//构建service
StudentStaticService service = new StudentStaticService();
Student student = new Student();
service.createStudent(student);
//这里用powermock来验证,而不是mock,更体现了powermock的强大
PowerMockito.verifyStatic();
}
再次运行,测试通过,如下图所示:
运行之前先让powermock为我们准备了StudentUtils工具类,而且采用mockstatic的方法,最后我们用powermock.verifyStatic()验证,而不是mock,更体现了powermock的强大。
PowerMock学习(四)之Mock static的使用的更多相关文章
- PowerMock学习(十一)之Mock private methods的使用
Mock private methods 就是mock私有方法啦,学到这不难发现,我们其实大部分都是通过反射去完成单元测试的,但是在实际中,某个类中的私有方法,个人不建议使用反射来测试,因为有时候会 ...
- PowerMock学习(八)之Mock Argument Matcher的使用
前言 本计划在上周六日将powermock学完,并同步到博客中,结果自己没经得住诱惑,又开始去打王者荣耀了.虽然两天时间我从钻石一升到了星耀V四星,但是我并没有觉得很开心,相反很失落呢.不得不说腾讯的 ...
- PowerMock学习(三)之Mock局部变量
编写powermock用例步骤: 类上面先写这两个注解@RunWith(PowerMockRunner.class).@PrepareForTest(StudentService.class) 先模拟 ...
- PowerMock学习(七)之Mock Constructor的使用
前言 我们在编码的时候,总习惯在构造器中传参数,那么在powermock中是怎么模拟带参数构造的呢,这并不难. 模拟场景 我们先模拟这样一个场景,通过dao中的传入一个是布尔类型(是否加载)和一个枚举 ...
- PowerMock学习(九)之Mock Answer的使用
关于Mock Answer 上一篇文章,有介绍过关于Arguments Matche的使用,其实 Answer的作用与其比较类似,但是它比 Arguments Matcher 更加强大. Argume ...
- 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...
- mock static方法
<dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mock ...
- ZigBee学习四 无线+UART通信
ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...
- PowerMock学习之PoweMock的入门(二)
前言 在上一篇<PowerMock学习之PoweMock的入门(一)>文章中,已经简单提及一些关于powermock的用法,但是入门还未完,我还要坚持把它学习并坚持更新到博客中. Mock ...
- TweenMax动画库学习(四)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
随机推荐
- opencv::处理边缘
卷积边界问题 图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理. 处理边缘 ...
- OsmocomBB软件实现栈概况
OsmocomBB软件实现栈概况 简单地说,本文仅描述软件中GSM信号接收到部分. 暂不提及发送流程,引导加载/引导流程,以及各种控制路径特别是从layer1到RF硬件. 首先,通过天线接收RF信号, ...
- Ribbon - Customizing the Ribbon Client
自定义Ribbon算法 自定义Ribbon 官网文档链接 Ribbon github源码地址 <!--ribbon配置--> <dependency> <group ...
- Flask框架实现给视图函数增加装饰器操作示例
在@app.route的情况下增加装饰器的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...
- VMware Workstation 12 一些可用的序列号
任选一个即可: VF5XA-FNDDJ-085GZ-4NXZ9-N20E6 UC5MR-8NE16-H81WY-R7QGV-QG2D8 ZG1WH-ATY96-H80QP-X7PEX-Y30V4 AA ...
- Web for pentester_writeup之LDAP attacks篇
Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...
- MIT线性代数:17.正交矩阵和Cram-Schmidt正交化
- p1156 题解(未完全解决)
题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D≤100)英尺. 卡门 ...
- Docker变量的相关总结
一.AVG与ENV 1.在Dockerfile中,使用ARG与ENV的区别 ARG:ARG定义的变量用于构建Docker镜像,在通过build把Dockerfile构建成镜像后,ARG定义的变量便不在 ...
- NOIP模拟30B 活该
T1:没有判-1 T2:推出柿子之后手摸错了!,只交了一个表 T3....... 完戏!,就是活该!