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. 对于接口 ...
随机推荐
- Swagger--解决日期格式显示为Unix时间戳格式 UTC格式
在swagger UI模型架构上,字段日期显示为“日期”:“2018-10-15T09:10:47.507Z”但我需要将其作为“日期”:“2018-9-26 12:18:48”. tips:以下这两种 ...
- 探究JavaScript闭包
什么是JavaScript闭包? 刚开始知道这个词,就误以为是自动执行的匿名函数块. 比如说+function(){}(); 然而并不是,那么请看下面的例子: function init() { va ...
- Leetcode Tags(5)Hash Table
一.500. Keyboard Row 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词. 输入: ["Hello", "Alaska", &q ...
- JavaScript随机生成布尔值
//方法一 var rand = Boolean(Math.round(Math.random())); conosole.log(rand) // 方法二: var arr = [true,fals ...
- 列表渲染.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SpringCloud之异常报警通知(八)
在之前整合降级的基础上,整合redis,达到报警的效果(redis的启动还是之前boot里面整合的redis) order-service pom.xml <dependency> < ...
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK在串行NOR Flash调试的原理. 本文是i.MXRT硬件那些事系列第二篇的续集,在第二篇首集 ...
- PHP输出A到Z及相关
先看以下一段PHP的代码,想下输出结果是什么. <?php for($i='A'; $i<='Z'; $i++) { echo $i . '<br>'; } ?> 输出的 ...
- AtCoder Grand Contest 038E - Gachapon
\(\bf Description\) 一个 \(0\) 到 \(n-1\) 的随机数生成器,生成 \(i\) 的概率是 \(A_i/S\) ,其中 \(S=\sum_{i=0}^{n} A_i\) ...
- P2115 [USACO14MAR]破坏(二分答案)
给定一串数,问删除中间一段,剩下的平均数最小是多少: 不容易想到这是个二分. $solution:$ 来手玩一点式子: 首先很容易想到一个前缀和$sum_i $表示i到1的前缀和,这样就能很容易地O( ...