一种常见的mock方式:MockUp + @Mock

import mockit.Mock;
import mockit.MockUp;
import org.junit.Assert;
import org.junit.Test;
import java.util.Calendar;
import java.util.Locale;//(Mockup + @Mock) 的mock方式
public class MockUpTest {@Testpublic void testMockUp(){/** 对java自带类Calendar的get方法进行定制* 只需要把Calendar类传入MockUp类的构造函数即可* */new MockUp<Calendar>(Calendar.class){//想mock哪个方法,就给哪个方法加上@Mock,没有@Mock的方法,不受影响@Mockpublic int get(int unit){if (unit == Calendar.YEAR){return 2017;}if (unit == Calendar.MONDAY){return 12;}if (unit == Calendar.DAY_OF_MONTH){return 25;}if (unit == Calendar.HOUR_OF_DAY){return 7;}return 0;}};// 从此Calendar的get方法,就沿用你定制过的逻辑,而不是它原先的逻辑。Calendar cal = Calendar.getInstance(Locale.FRANCE);Assert.assertTrue(cal.get(Calendar.YEAR) == 2017);Assert.assertTrue(cal.get(Calendar.MONDAY) == 12);Assert.assertTrue(cal.get(Calendar.DAY_OF_MONTH) == 25);Assert.assertTrue(cal.get(Calendar.HOUR_OF_DAY) == 7);// Calendar的其它方法,不受影响Assert.assertTrue((cal.getFirstDayOfWeek() == Calendar.MONDAY));}
}

Mock方式是不是很简单,直接 ? 难怪很多程序员们都喜欢用MockUp & @Mock了。

那是不是我们只需要掌握MockUp & @Mock就可以了?就不需要了解其它Mock API了?
当然不是! 掌握了MockUp & @Mock的确能帮我们解决大部分的Mock场景,因为其使用方式最直接嘛。

比如下面的场景是MockUp & @Mock做不到的。

  • 一个类有多个实例。只对其中某1个实例进行mock。
    最新版的JMockit已经让MockUp不再支持对实例的Mock了。1.19之前的老版本仍支持。
  • AOP动态生成类的Mock。
  • 对类的所有方法都需要Mock时,书写MockUp的代码量太大。
    比如web程序中,经常需要对HttpSession进行Mock。若用MockUp你要写大量的代码,可是用@Mocked就一行代码就可以搞定。

MockUp & @Mock的确是好东西,在实际Mock场景中,我们需要灵活运用JMockit其它的Mock API。让我们的Mock程序简单,高效。

MockUp & @Mock比较适合于一个项目中,用于对一些通用类的Mock,以减少大量重复的**new Exceptations{{}}**代码。

(七)JMockit 的MockUp+@Mock--基础篇相关推荐

  1. (三)JMockit API:@Mocked -基础篇

    @Mocked可以修饰一个类,接口等. 当@Mocked修饰一个类 import mockit.Mocked; import org.junit.Assert; import org.junit.Te ...

  2. AUTOSAR从入门到精通100讲(七十九)-AUTOSAR基础篇之DTC

    本文将聚焦于大家都耳熟能详的DTC(Diagnostic Trouble Code)技术点来聊一聊. DTC基本介绍 DTC顾名思义即为诊断故障码,一种用来记录当某ECU发生或检测到某种故障时所呈现在 ...

  3. Python基础篇(七)

    Python基础篇(七) 前言 一.元组 1.1 元组的定义 1.2 元组的常见操作 二.字典 2.1 字典的语法 2.2 字典常见操作 2.3 字典的循环遍历 三.任务清单 3.1 基础练习 3.2 ...

  4. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)-----(七)系统时钟的介绍

    疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (七)系统时钟的介绍 MSP430G2553 系列单片机的时钟系统,包括2-4个时钟源,可以为外设和CPU提供3个系统时钟. 注意:LFX1不支 ...

  5. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

    完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...

  6. Python面试基础篇 - 50道经典面试题(附答案及多种解答)

    大家好,我是辣条哥 高考刚结束不久,网上各种招工的,工地招搬砖的都开始活跃了,这时候我要是不出来活跃一波感觉有点不合时宜了. 于是特意整理了这一份Python面试题的基础篇,进阶的先不说我能不能整理出 ...

  7. 基础篇9-python基本数据结构-列表

    基础篇9-python基本数据结构-列表 一.列表: 1.有序的集合 2.通过偏移来索引,从而读取数据 3.支持内嵌 a =[[1,2,3],[4,5,6]] 4.可变类型 a[0][1] = 7 二 ...

  8. 计算机编程书籍-笨办法学Python 3:基础篇+进阶篇

    编辑推荐: 适读人群 :本书适合所有已经开始使用Python的技术人员,包括初级开发人员和已经升级到Python 3.6版本以上的经验丰富的Python程序员. "笨办法学"系列, ...

  9. Linux技术研究-基础篇(raid与LVM,配额)

    Linux技术研究-基础篇(raid与LVM,配额) 创建RAID-5 若想建立新的md1设备 只在/dev下建立还不够 重启后会消失 固化的方法是 为了使udev自动产生/dev/md1, /dev ...

最新文章

  1. java 反射 new区别_JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)...
  2. 文件路径最好使用正斜杠,使用反斜杠可能在unix系统中访问不到文件
  3. php在一定范围内去随机整数,php-如何从随机位生成范围内的整数
  4. C++11:using 的各种作用
  5. vue.js单页面应用实例
  6. Render errors:One or more layouts are missing the layout_width or layout_height attributes
  7. Android之Toolbar的三个问题:修改左边箭头颜色、怎样修改右边以及子activity中的toolbar添加返回箭头...
  8. 第六章:fusionChart的例子
  9. java jquery分页_如何最简单的实现java分页
  10. 海康威视摄像机SDK二次开发-JavaDemo环境搭建详解
  11. and or not 优先级_EXCEL函数与公式剖析:AND
  12. 安装 mariadb全套教程
  13. 企业盈利能力分析-毛利率、销售净利率、投资回报率、权益回报率、资产回报率...
  14. 表结构 shopnc
  15. MSP430F6638单片机复习笔记
  16. 从飞思卡尔到NXP,经久不衰的i.MX系列产品背后的“成功学”
  17. unity讲解(入门)
  18. getWindow().getDecorView().setSystemUiVisibility(...)设置状态栏属性
  19. ubuntu1804系统设置在哪里_ubuntu1804安装后设置
  20. echarts 3d地图

热门文章

  1. M1芯片安装CocoaPods问题
  2. 什么是正向代理?什么是反向代理?
  3. 微信小程序时间筛选功能
  4. 维克森林大学计算机科学专业好不好,美国维克森林大学计算机科学硕士专业介绍...
  5. Flutter2.10开始支持Windows
  6. opencv图像运算(python)
  7. solr mysql 全文搜索_全文检索Solr集成HanLP中文分词
  8. 阿里云服务器安装MySQL及配置
  9. 解决SecureFX无法连接linux服务器
  10. 聚焦行为识别和异常检测!ECCV 2022 精细视频理解挑战赛(DeeperAction)开启!