编写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局部变量的更多相关文章

  1. PowerMock学习(一)之PoweMock的入门--模拟新增学生操作

    关于powermock 在TDD领域Mock框架有很多,比如EasyMock,JMock,Mockito.可能有些同学会好奇了,为什么要重点把powermock拿出来呢,因为powermock可以解决 ...

  2. PowerMock学习之PoweMock的入门(二)

    前言 在上一篇<PowerMock学习之PoweMock的入门(一)>文章中,已经简单提及一些关于powermock的用法,但是入门还未完,我还要坚持把它学习并坚持更新到博客中. Mock ...

  3. PowerMock学习(五)之Verifying的使用

    前言 Verifying是一个非常强大的测试工具,在mock系列框架中使用广泛,主要用于验证方法是否被调用,下面将举例说明. 场景 模拟这样一个场景,通过Dao查询学生,如果存在更新原来学生,不存在则 ...

  4. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  5. TweenMax动画库学习(三)

    目录               TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)           ...

  6. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

    本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...

  7. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  8. 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化

    1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...

  9. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  10. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

随机推荐

  1. web项目中登陆超时的功能实现(基于C#)

    当我们登陆进网站后,中途去看别的东西,没有再与该网站的服务器交互,就会弹出一个js窗口,登陆超时请重新登陆,并跳转到登陆页面. 步骤1.实现原理,在web.config中配置session的超时时间, ...

  2. 第六版PMBOK中工具与技术的介绍:数据收集数据分析数据表现

    数据收集技术: 1.头脑风暴:收集关于项目方法的创意和解决方案.2.焦点小组:召集预定的相关方和主题专家,了解他们对所讨论的产品服务或成果的期望和态度.主持人引导大家互动式讨论.3.访谈:通过与相关方 ...

  3. 解决seajs ie8 对象不支持charAt 属性。

    在使用 seajs做项目,今天偶然发现在ie9以下的ie版本会 报出 对象不支持charAt 属性.刚开始还以为是自己写的js部分出了问题,经过几个小时的奋战.最终找到了其根源.在sea-debug. ...

  4. jenkins中使用变量

    查看jenkins内置变量: 1.新建一个job: 2.构建-增加构建步骤-执行shell: 3.点击  可用的环境变量列表 即可查看 如WORKSPACE : 作为工作空间分配给构建目录的绝对路径 ...

  5. 原来热加载如此简单,手动写一个 Java 热加载吧

    1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...

  6. 微信小程序自定义弹窗(可通用)

    效果图 .wxml <cover-view class='mask' wx:if='{{isShow}}'> <cover-view class='modal'> <co ...

  7. javascript domAPI整理

    对一般兼容性和特点做了标识(主要是ie8+) 节点类型 节点类型 节点值 标签节点(Element) 1 属性节点(Attr) 2 文本节点(Text) 3 CDATA节点(CDATASetion) ...

  8. PHP的陷阱

    PHP的陷阱 写代码的时候有个疑惑,那就是数组下标不存在的时候就会挂掉Undefined Index XXXX,这是对的,但是有时候他就不报错,这又是矛盾的. 请看下面的例子: $json_raw = ...

  9. jwt token

    1 ,session 认证机制: ,用户登录,传递用户名和密码给客户端 ,服务器进行用户名和密码的校验,如果校验成功,将用户保存到session ,将sessionid通过cookie返回给客服端,客 ...

  10. Java 干货之深入理解String

    可以证明,字符串操作是计算机程序设计中最常见的行为,尤其是在Java大展拳脚的Web系统中更是如此. ---<Thinking in Java> 提到Java中的String,总是有说不完 ...