PowerMock学习(七)之Mock Constructor的使用
前言
我们在编码的时候,总习惯在构造器中传参数,那么在powermock中是怎么模拟带参数构造的呢,这并不难。
模拟场景
我们先模拟这样一个场景,通过dao中的传入一个是布尔类型(是否加载)和一个枚举类(使用哪种数据库),构造Dao这个类,在编写一个插入学生方法
dao部分的代码
具体示例代码如下:
package com.rongrong.powermock.mockconstructor; /**
* @author rongrong
* @version 1.0
* @date 2019/11/28 23:12
*/
public class StudentConstructorDao {
public enum DataBaseType{
MYSQL,
ORACLE,
} /**
*
* @param isLoad 数据库是否加载即链接
* @param dataBaseType 数据库类型
*/
public StudentConstructorDao(Boolean isLoad,DataBaseType dataBaseType) {
throw new UnsupportedOperationException();
} public void insertStudent(StudentConstructor studentConstructor){
throw new UnsupportedOperationException();
}
}
service部分代码
用来调用dao中的函数,具体代码如下:
package com.rongrong.powermock.mockconstructor; /**
* @author rongrong
* @version 1.0
* @date 2019/11/28 23:18
*/
public class StudentConstructorService { public void createStudnet(StudentConstructor studentConstructor){
StudentConstructorDao studentConstructorDao = new StudentConstructorDao(false, StudentConstructorDao.DataBaseType.MYSQL);
studentConstructorDao.insertStudent(studentConstructor);
}
}
编写测试用例
使用powermock去模拟构造函数,并测试这个service,具体代码如下:
package com.rongrong.powermock.mockconstructor; 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; import static com.rongrong.powermock.mockconstructor.StudentConstructorDao.DataBaseType.MYSQL; /**
* @author rongrong
* @version 1.0
* @date 2019/11/28 23:54
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(StudentConstructorService.class)
public class TestStudentConstructorService { @Test
public void testStudentConstructorService(){
StudentConstructorDao studentConstructorDao = PowerMockito.mock(StudentConstructorDao.class);
try {
//此处需要注释下,需要构造一个带参数的Dao对象,即便是假的也要带参数,该类初始化的时候就带参数
PowerMockito.whenNew(StudentConstructorDao.class).withArguments(false,MYSQL).thenReturn(studentConstructorDao);
StudentConstructor studentConstructor = new StudentConstructor();
StudentConstructorService studentConstructorService = new StudentConstructorService();
studentConstructorService.createStudnet(studentConstructor);
Mockito.verify(studentConstructorDao).insertStudent(studentConstructor);
} catch (Exception e) {
e.printStackTrace();
}
}
}
总结
- 首先mock了一个StudentConstructorDao对象实例
- 使用whenNew语法,传入必须入参,注意这里的参数必须和Service中的参数一致,否则会在Service中还会继续创建一个新的StudentConstructorDao实例
- 接着验证方法的调用
注意:当不能确定构造器中参数时,使用withAnyArguments()即可,关于Student类代码,参照之前文章Student类,此处略
PowerMock学习(七)之Mock Constructor的使用的更多相关文章
- PowerMock学习之PoweMock的入门(二)
前言 在上一篇<PowerMock学习之PoweMock的入门(一)>文章中,已经简单提及一些关于powermock的用法,但是入门还未完,我还要坚持把它学习并坚持更新到博客中. Mock ...
- 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...
- MyBatis学习七:spring和MyBatis整合
<\mybatis\day02\16mybatis和spring整合-sqlSessionFactory配置.avi;> MyBatis学习七:spring和MyBatis整合.逆向工程 ...
- SVG 学习<七> SVG的路径——path(1)直线命令、弧线命令
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- day 85 Vue学习七之vue-cookie
Vue学习七之vue-cookie 通过vue如何操作cookie呢 参考链接:https://www.jianshu.com/p/535b53989b39 第一步:安装vue-cookies ...
- (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码
http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...
- PowerMock学习(一)之PoweMock的入门--模拟新增学生操作
关于powermock 在TDD领域Mock框架有很多,比如EasyMock,JMock,Mockito.可能有些同学会好奇了,为什么要重点把powermock拿出来呢,因为powermock可以解决 ...
- PowerMock 支持gRPC的Mock Server实现
PowerMock是一个Mock Server的实现,它同时支持HTTP与gRPC协议接口的Mock,并提供了灵活的插件功能. 这个工具面向于前后端.测试等对有接口Mock需求的开发人员,也可以作为一 ...
- PowerMock学习(六)之Mock Final的使用
Mock Final mockfinal相对来说就比较简单了,使用powermock来测试使用final修饰的method或class,比较简单,接口调用部分,还是service调用dao. 对于接口 ...
随机推荐
- 解决 IDEA 创建 Gradle 项目没有src目录
第一次写博客,前几天遇到一个问题,就是使用ider创建gradle项目后,src目录没有自动生成出来,今天就给大家分享一下怎么解决. 目录: 1.创建Gradle项目 2.解决没有生成src目录问题 ...
- Linux 修改网卡名
1. 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens32 (“ens32”为当前网卡名) 将NAME.DEVICE项修改为eth0 2. ...
- vue 开发插件流程
UI demo UI 插件汇总 我的github iSAM2016 在练习写UI组件的,用到全局的插件,网上看了些资料.看到些的挺好的,我也顺便总结一下写插件的流程: 声明插件-> 写插件-&g ...
- 前后端hosts配置访问问题解决思路
问题背景:前后端分离情况下后端开发测试需要配置hosts,有此问题的人员有RD,QA,PM,User 测试环境由于用户使用这种配置导致无法使用线上系统发起单据影响用户使用,同时让用户误以为系统出问题而 ...
- swift 实现 iOS摇一摇
本博客包含了如何实现iOS摇一摇全步骤,包括了完整的代码. 先附上demo地址https://github.com/Liuyubao/LYBShake ,支持swift3.0+. 一.导包 项目主要使 ...
- docker 概念简介、简单入门
1.docker 简介 Docker 是一个开源项目,这个项目旨在通过把应用程序打包为可移植的.自给自足的容器(引用语) DocKer一次构建可放在任何地方就可以运行,不需要进行任何改变DocKer ...
- 微服务SpringCloud之GateWay服务化和过滤器
Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所 ...
- tslib1.1移植
安装步骤: 1.准备工作确保以下软件已安装 # apt-get install autoconf(或autoconf2.13)# apt-get install automake# apt-get i ...
- starUML 3.0.2文件 百度云
文件百度云---链接:https://pan.baidu.com/s/1BVX9Ze40bkgd3k_4WFb99A 提取码:t7kj 使用方法:将starUML安装目录(一般为 C:\Program ...
- 关于Jvm的见解(一)
Jvm组成结构 硬件体系(如Intel体系.spac等)——>操作系统(如Windows.Linux等)——>Java Virtual Machine 所以虚拟机与硬件系统并没有直接的交 ...