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的使用的更多相关文章

  1. 用PowerMock mock final类

    mock final类相对简单,直接贴代码 被测方法: public class FinalEmployeeService { public void insertEmployee(Employee ...

  2. 在Kotlin上怎样用Mockito2 mock final 类(KAD 23)

    作者:Antonio Leiva 时间:Mar 2, 2017 原文链接:https://antonioleiva.com/mockito-2-kotlin/ 如我们在前面文章中谈到的,Kotlin最 ...

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

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

  4. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  5. TweenMax动画库学习(六)

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

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

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

  7. SVG 学习<六> SVG的transform

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  8. C#多线程学习(六) 互斥对象

    如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先 ...

  9. Unity学习(六)5.x依赖打包

    http://blog.sina.com.cn/s/blog_89d90b7c0102w2ox.html unity5已经封装好了接口,所以依赖打包并没有那么神秘和复杂了. 打包: 1.定义好资源的a ...

随机推荐

  1. Python之路(第四十篇)进程池

    一.进程池 进程池也是通过事先划分一块系统资源区域,这组资源区域在服务器启动时就已经创建和初始化,用户如果想创建新的进程,可以直接取得资源,从而避免了动态分配资源(这是很耗时的). 线程池内子进程的数 ...

  2. spring boot mybatis多多数据源解决方法

    在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的AOP的编程方式根据访问的方法的不同进行动态的切换数据源 ...

  3. Spark执行流程(转)

       原文地址:http://blog.jobbole.com/102645/     我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程.根据你使 ...

  4. Mysql数据库(十)MySQL性能优化

    一.优化概述 为了提高MySQL数据库的性能,不要进行一系列的优化措施.如果MySQL数据库需要进行大量的查询操作,那么就需要对查询语句进行优化.对于耗费时间的查询语句进行优化,可以提高整体地查询速度 ...

  5. django-模板之now标签(七)

    1.在settings.py中设置成中国时区 2.index.html 3.显示

  6. 《Effective Java》 读书笔记(五)使用依赖注入取代原本的资源依赖

    相信接触过Spring的同学,对于依赖注入并不陌生. 刚开始在听说这个名字的时候,一直不明白到底什么叫依赖注入,后来才发现,依赖注入一直都存在我们日常代码中,只是我们没有刻意的把它提出来,然后再取这样 ...

  7. [tesseract-ocr]OCR图像识别Ubuntu下环境包安装

    问题: ImportError: libSM.so.6: cannot open shared object file: No such file or directory 解决: sudo apt- ...

  8. Data Deduplication Workflow Part 1

    Data deduplication provides a new approach to store data and eliminate duplicate data in chunk level ...

  9. 【Leetcode 做题学算法周刊】第三期

    首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...

  10. python经典算法题:Z字变形

    题目 直接看图! 思路第一步:分组 我们把传入的字符串进行分组, 每个框内的字母为1组: 我们发现每个相同颜色的框内的一组字母的特点是在传入的字符串中是连续的: 我们还发现每组字母的个数是由numRo ...