PowerMock学习(三)之Mock局部变量
编写powermock用例步骤:
- 类上面先写这两个注解@RunWith(PowerMockRunner.class)、@PrepareForTest(StudentService.class)
- 先模拟一个假对象即studentdao方法中的局部变量
- 用无参的方式new对象
- 再模拟这个对象被调用时,是否有返回,有返回值给出默认值,没有用doNothing()
- 验证有返回值使用assertEquals即可,无返回值使用Mockito.verify验证
实际案例
接着上一篇文章中的代码,修改下service中的代码,这次我不通过构造器注入Dao,在方法中new一个StudentDao,创建一个名为StudentNewService的类。
具体示例代码如下:
package com.rongrong.powermock.service; import com.rongrong.powermock.dao.StudentDao; /**
* @author rongrong
* @version 1.0
* @date 2019/11/17 21:13
*/
public class StudentNewService { /**
* 获取学生个数
* @return返回学生总数
*/
public int getTotal() {
StudentDao studentDao = new StudentDao();
return studentDao.getTotal();
} /**
* 创建学生
* @param student
*/
public void createStudent(Student student) {
StudentDao studentDao = new StudentDao();
studentDao.createStudent(student);
}
}
针对上面修改部分代码,进行单元测试,以下代码有采用传统方式测试和采用powermock方式进行测试,具体代码如下:
package com.rongrong.powermock.service; import com.rongrong.powermock.dao.StudentDao;
import org.junit.Assert;
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 org.junit.Assert.assertEquals;
import static org.junit.Assert.fail; /**
* @author rongrong
* @version 1.0
* @date 2019/11/20 21:42
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(StudentNewService.class)
public class TestNewStudentService { /**
* 传统方式测试
*/
@Test
public void testGetStudentTotal() {
StudentNewService studentNewService = new StudentNewService();
int total = studentNewService.getTotal();
assertEquals(total, 10);
} /**
* @desc测试有返回值类型 采用powermock进行测试获取学生个数
*/
@Test
public void testGetStudentTotalWithPowerMock() {
//先模拟一个假对象即studentdao方法中的局部变量
StudentDao studentDao = PowerMockito.mock(StudentDao.class);
try {
//这句话我按照英文理解就是,我用无参的方式new了一个StudentDao对象
PowerMockito.whenNew(StudentDao.class).withNoArguments().thenReturn(studentDao);
//再模拟这个对象被调用时,我们默认假定返回10个证明调用成功
PowerMockito.when(studentDao.getTotal()).thenReturn(10);
//这里就是service就不用再说了
StudentNewService studentNewService = new StudentNewService();
int total = studentNewService.getTotal();
assertEquals(total, 10);
} catch (Exception e) {
fail("测试失败了!!!");
e.printStackTrace();
} } /**
* @desc测试的无返回值类型 采用powermock进行测试创建学生
*/
@Test
public void testCreateStudentWithPowerMock() {
//先模拟一个假对象即studentdao方法中的局部变量
StudentDao studentDao = PowerMockito.mock(StudentDao.class);
try {
//这句话我按照英文理解就是,我用无参的方式new了一个StudentDao对象
PowerMockito.whenNew(StudentDao.class).withNoArguments().thenReturn(studentDao);
Student student = new Student();
//这句话注释与否都能运行通过,也就是我只能判断他是否被调用
//PowerMockito.doNothing().when(studentDao).createStudent(student);
//这里就是service就不用再说了
StudentNewService studentNewService = new StudentNewService();
studentNewService.createStudent(student);
Mockito.verify(studentDao).createStudent(student);
} catch (Exception e) {
fail("测试失败了!!!");
e.printStackTrace();
} } }
运行上面的测试用例,会发现第一个失败,后面两个都运行成功,即有返回值和无返回值类型的测试(void类型)。

注意:对于无返回值类型的测试,只能验证其是否被调用,这里还请注意。
PowerMock学习(三)之Mock局部变量的更多相关文章
- PowerMock学习(一)之PoweMock的入门--模拟新增学生操作
关于powermock 在TDD领域Mock框架有很多,比如EasyMock,JMock,Mockito.可能有些同学会好奇了,为什么要重点把powermock拿出来呢,因为powermock可以解决 ...
- PowerMock学习之PoweMock的入门(二)
前言 在上一篇<PowerMock学习之PoweMock的入门(一)>文章中,已经简单提及一些关于powermock的用法,但是入门还未完,我还要坚持把它学习并坚持更新到博客中. Mock ...
- PowerMock学习(五)之Verifying的使用
前言 Verifying是一个非常强大的测试工具,在mock系列框架中使用广泛,主要用于验证方法是否被调用,下面将举例说明. 场景 模拟这样一个场景,通过Dao查询学生,如果存在更新原来学生,不存在则 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化
1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...
随机推荐
- python soket服务和客户端Demo
#服务端from socket import * s=socket(AF_INET,SOCK_STREAM)#IVP4 寻址 tcp协议 s.bind(('',6666))#补丁端口 s.listen ...
- java学习3-流程控制与数组
1.顺序结构 2.分支结构 3.循环结构 4.控制循环结构 break continue return 5.数组
- windows设置本地域名解析
1.首先找到host文件:C:\Windows\System32\drivers\etc 2.打开host文件: # Copyright (c) 1993-2009 Microsoft Corp. # ...
- IIS服务器文件跨域问题(几乎可以解决大多数跨域问题)
Windows server 服务器 1:在管理工具中选择,找到IIS 2:打开IIS管理,找到网站 3:找到HTTP响应头标 4:打开HTTP响应头标 5:添加 添加:Access-Control- ...
- (day33)数据库
目录 1. 数据库是什么 2. 为什么使用数据库 3. 数据库的分类 1. 关系型数据库 2. 非关系型数据库 4. mysql的架构 5. mysql的安装 1. windows的安装 2. win ...
- ORACLE定时备份方案
ORACLE定时备份方案 采用ORACLE的EXP工具,实现ORACLE的备份:采用LINUX的服务crond实现定时功能. 1 编辑SH,实现备份功能 #vi oracle_backup.sh,输入 ...
- MySQL开发篇(5)索引、视图、触发器、SQL中的安全问题、SQL Mode、
一.索引 所有MySQL列类型都可以被索引,对相关列使用索引是提高SELECT操作性能的最佳途径.每种存储引擎(MyISAM.InnoDB.BDB.MEMORY等)对每个表至少支持16个索引,总索引长 ...
- django-模板之if语句(九)
- Java 向数组中添加一个元素
方法 一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度. 向数组中添加元素思路: 第一步:把 数组 转化为 集合 list = Arrays.asList(array); 第二 ...
- python写购物车小程序
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Author: Skyell Wang # @Time : 2018/5/22 15:50 # 基础要 ...