PowerMock学习(六)之Mock Final的使用
Mock Final
mockfinal相对来说就比较简单了,使用powermock来测试使用final修饰的method或class,比较简单,接口调用部分,还是service调用dao。
对于接口及场景这里就不细说了,特别简单。
service层
具体代码示例如下:
package com.rongrong.powermock.mockfinal; /**
* @author rongrong
* @version 1.0
* @date 2019/11/27 21:29
*/
public class StudentFinalService { private StudentFinalDao studentFinalDao; public StudentFinalService(StudentFinalDao studentFinalDao) {
this.studentFinalDao = studentFinalDao;
} public void createStudent(Student student) {
studentFinalDao.isInsert(student);
}
}
dao层
为了模拟测试,我在dao层的类加了一个final关键字进行修饰,也就是这个类不允许被继承了。
具体代码如下:
package com.rongrong.powermock.mockfinal; /**
* @author rongrong
* @version 1.0
* @date 2019/11/27 21:20
*/
final public class StudentFinalDao { public Boolean isInsert(Student student){
throw new UnsupportedOperationException();
}
}
进行单元测试
为了区分powermock与Easymock的区别,我们先采用EasyMock测试,这里先忽略EasyMock的用法,有兴趣的同学可自行去尝试学习。
使用EasyMock进行测试
具体代码示例如下:
@Test
public void testStudentFinalServiceWithEasyMock(){
//mock对象
StudentFinalDao studentFinalDao = EasyMock.createMock(StudentFinalDao.class);
Student student = new Student();
//mock调用,默认返回成功
EasyMock.expect(studentFinalDao.isInsert(student)).andReturn(true);
EasyMock.replay(studentFinalDao);
StudentFinalService studentFinalService = new StudentFinalService(studentFinalDao);
studentFinalService.createStudent(student);
EasyMock.verify(studentFinalDao);
}
我们先来运行下这个单元测试,会发现运行报错,具体如下图显示:

很明显由于有final关键字修饰后,导致不能让测试成功,我们可以删除final关键再来测试一下,结果发现,测试通过。

使用PowerMock进行测试
具体代码示例如下:
package com.rongrong.powermock.mockfinal; import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner; /**
* @author rongrong
* @version 1.0
* @date 2019/11/27 22:10
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(StudentFinalDao.class)
public class TestStudentFinalService { @Test
public void testStudentFinalServiceWithPowerMock(){
StudentFinalDao studentFinalDao = PowerMockito.mock(StudentFinalDao.class);
Student student = new Student();
PowerMockito.when(studentFinalDao.isInsert(student)).thenReturn(true);
StudentFinalService studentFinalService = new StudentFinalService(studentFinalDao);
studentFinalService.createStudent(student);
Mockito.verify(studentFinalDao).isInsert(student);
}
}
运行上面的单元测试时,会发现运行通过!!
PowerMock学习(六)之Mock Final的使用的更多相关文章
- 用PowerMock mock final类
mock final类相对简单,直接贴代码 被测方法: public class FinalEmployeeService { public void insertEmployee(Employee ...
- 在Kotlin上怎样用Mockito2 mock final 类(KAD 23)
作者:Antonio Leiva 时间:Mar 2, 2017 原文链接:https://antonioleiva.com/mockito-2-kotlin/ 如我们在前面文章中谈到的,Kotlin最 ...
- PowerMock学习之PoweMock的入门(二)
前言 在上一篇<PowerMock学习之PoweMock的入门(一)>文章中,已经简单提及一些关于powermock的用法,但是入门还未完,我还要坚持把它学习并坚持更新到博客中. Mock ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- TweenMax动画库学习(六)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...
- SVG 学习<六> SVG的transform
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- C#多线程学习(六) 互斥对象
如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先 ...
- Unity学习(六)5.x依赖打包
http://blog.sina.com.cn/s/blog_89d90b7c0102w2ox.html unity5已经封装好了接口,所以依赖打包并没有那么神秘和复杂了. 打包: 1.定义好资源的a ...
随机推荐
- 网络攻防实验任务三_(2)X-Scan通用漏洞扫描实验
首先在宿主机中打开xscan_gui.exe,结果系统直接将它删掉了. 大概是因为开了防火墙的缘故. 于是我在win7虚拟机中运行这个程序. 并且关闭防火墙,在win7中可以运行 我再试了一下win1 ...
- Unity修改脚本后调试
修改脚本后调试有时候需要运行,为了提高效率可以设置编辑器中执行,同时也可以开启有效性检查(即更改面板变量即可刷新代码) [ExecuteInEditMode] public class XXXX: M ...
- 启动elasticsearch报错的几种原因及解决方法
ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low ...
- 被低估的.NET(下)-2019 中国.NET 开发者峰会
Time flies!不知不觉距离上篇<被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾>和中篇<被低估的.net(中) - 广州.net俱乐部201 ...
- 陈莉君教授: 回望踏入Linux内核之旅
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 陈莉君 来源: 微信公众号linux阅码场(id: linuxdev) 初次踏入Linux 几多耕耘,几多收获 ...
- Android 刷机方案
## 获取 在刷机之前,需要在电脑上下载 **Android Preview** 包,一般我都是到 [安卓中国](https://developer.android.google.cn/preview ...
- python中@property装饰器的使用
目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...
- 部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)
部署spring boot + Vue遇到的坑(权限.刷新404.跨域.内存) 项目背景是采用前后端分离,前端使用vue,后端使用springboot. 工具 工欲善其事必先利其器,我们先找一个操作L ...
- Sublime text3配置C++环境
前言 传说sublime是全球最好的编辑器,可是只是编辑器啊!!!如果要运行,对于我们这些蒟蒻来说,不得不去使用DEV_C++.我们总是幻想能让sublime变成一个轻量级IDE,那该多好啊!!! 那 ...
- oop面向对象知识总结 静态成员和友元
第十一章 静态成员和友元 11.1 静态成员 1.C++类当中的静态数据成员仍借用保留字static,但是与之前的静态全局变量,静态局部变量以及静态函数没有关系. 2.静态数据成员不占用具体对象的数据 ...