使用Mockito对类成员变量进行Mock
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
Mock的中文的意思就是模拟,Mockito是一个模拟对象框架,主要还是用于单元测试中,它通过隐藏真实的实现来返回我们期望的结果,这样我们就可以排除其它可能对当前单元的执行结果产生影响的其它因素,如我们的某个功能需要调用一个远程接口,但是这个时候我们只需要关心当前功能是否能够正常工作而不需要关心远程接口是否正常工作,我们就可以通过模拟远程接口返回的正确或者错误值进行测试。
这是两篇关于Mockito可以快速入门的文章:
http://blog.csdn.net/onlyqi/article/details/6396646http://blog.csdn.net/onlyqi/article/details/6546589
这其中介绍了Mockito的基本使用方式,以及可供参的例子,对初次接触的Mockito的人来说,算是不错的入门文档。
下面是Mockito本身的Javadoc中带的实例,只不过是全英文的,和上面提到的两篇文章有异曲同工之处,只不过会介绍得更加介绍一些,有兴趣的话可以看看:
http://mockito.googlecode.com/svn/branches/1.6/javadoc/org/mockito/Mockito.html
在实际的操作过程当中,我们经常会对类成员的变量进行Mock,特别是对第三文类库中类的类成员变量进行Mock,这个时候我们不能够去修改第三方库的源代码,我们这个时候可以有两种方式来达这个目的:
1、通过使用继续的方式
不过这种方式会受限于被Mock的类成员变量的变量定义范围,只有public及protected的才可以使用这种方式,如以下是一个第三方库的一个类:
public class OneClass{ protected TestA testA; //......}
我们这个时候可以在Mock的测试类中使用一个类来继承这个类,然后把变量通过子类的super调用传给父类:
private class OneClassChild extends OneClass{ public OneClassChild(TestA testA){ super.testA = testA; } }
我们的Mock代码就可以写成这样了:
@Testpublic void testMock(){ TestA testA = new TestA(); OneClass oneClass = new OneClassChild(testA); //假设需要调用方法callOneClassMethod,Return根据实际情况进行返回了 when(oneClass.callOneClassMethod()).thenReturn(0); //...... }
这样就达到Mock了OneClass中的类成员变量testA的目的,用我们需要的返回结果,替代了真实的返回结果。
2、通过使用反射的方式
如这个时候第三方类库中的类的成员变量为私有的:
public class OneClass{ private TestA testA; //......}
这个时候通过反射的方式将这个类中的成员变量给替换掉,这个时候的Mock代码就会如下:
@Testpublic void testMock(){ TestA testA = new TestA(); OneClass oneClass = new OneClass(); Field testAField = oneClass.getClass().getDeclaredField("testA"); testAField.setAccessible(true); testAField.set(oneClass, testA); //假设需要调用方法callOneClassMethod,Return根据实际情况进行返回了 when(oneClass.callOneClassMethod()).thenReturn(0); //...... }
比较上面的两种方式,还是第二种比较通用,不会受到变量的可见性的影响。
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
使用Mockito对类成员变量进行Mock相关推荐
- C++---类成员变量定义为引用
C++---类成员变量定义为引用 摘要:类成员变量是可以定义为引用类型的,但是我们需要注意一下用法 note1:在类中定义引用变量, 必须要在初始化列表中初始化该成员变量(const 类型数据成员也必 ...
- java实例成员和类成员变量_Java 中成员变量又分为 和类成员变量。_学小易找答案...
[简答题]I'm not quite so poetic, but I do know that the subway is as essential to the character of New ...
- 编写Java程序,创建Dota游戏中的兵营类,兵营类有一个类成员变量count、一个实例变量name和另一个实例变量selfCount。
返回本章节 返回作业目录 需求说明: 创建Dota游戏中的兵营类 兵营类有一个类成员变量count.一个实例变量name和另一个实例变量selfCount. count表示的是兵营已经创建士兵的总数: ...
- java实例变量成员变量_Java的类成员变量、实例变量、类变量,成员方法、实例方法、类方法...
总是被这些相似的概念搞晕,查阅了资料后做个小总结,以变量为例,方法辨析类似. 1.多胞胎名字汇总辨析 成员变量和成员方法是范围最大的定义,提到成员变量就可以理解成你所定义在一个类体中的各类变量的统称, ...
- 【Kotlin】Kotlin 面向对象 ( 类 | 成员变量 | 成员方法 | 封装 | 继承 | 多态 )
文章目录 I . 创建简单类 ( 整型字段 ) II . 创建简单类 ( 整型字段 + 字符串字段 ) III . 类方法定义 IV . 封装 V . 继承 VI . 多态 与 抽象类 I . 创建简 ...
- 【C++】38.类成员变量声明为 对象与指针的区别
在我们平时写代码或阅读代码时,经常会看到,某个类A中需要使用另一个类B的方法.那么下面会看到两种用法: 一种是直接定义一个B类对象. 一种是在类A中定义一个B类指针: 如: // 头文件 std::s ...
- 【转】Java类成员变量默认初始化规则
一个变量作为类成员使用的时候,如果没有被初始化,java会为其分配默认值: -------------------------------------------------------------- ...
- python类成员变量_Python 类变量和成员变量
Python 类变量和成员变量 类与对象的方法 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分.事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提 ...
- java中如何声明班干部,java类成员变量的定义和声明
在 Java 中类的成员变量定义了类的属性.例如,一个学生类中一般需要有姓名.性别和年龄等属性,这时就需要定义姓名.性别和年龄 3 个属性.声明成员变量的语法如下:[public|protected| ...
最新文章
- node seneca_使用Node.js和Seneca编写国际象棋微服务,第1部分
- Android 代码设置调试等待
- 【响应式Web前端设计】css如何设置边框的圆角样式?border-radius属性设置圆角样式(图 文)
- 004-SLF4J的简单使用
- android修改系统设置权限_安卓保护隐私利器!完美解决软件「不给权限就不运行」的小工具...
- PKUWC2020游记与题面整理
- Verilog UDP(User Defined Primitives)
- Java动态代理的两种实现方法
- [转载]Asp.net MVC中Controller返回值类型
- win7个人计算机的ip地址,win7计算机ip地址查询_win7本机ip地址查询
- centos 下安装mysql
- ListView添加图片文字项
- 20. 为包含指针的关联容器指定比较类型
- ipad文献管理软件_五款常用的文献管理神软件
- 东芝 rc100 linux,入门级NVMe固态硬盘首选,东芝RC100带来的超值体验
- 电子学推动计算机产业,自旋电子学和计算机硬件产业!-物理杂志.PDF
- 2021年全球与中国滴漏式咖啡机行业市场规模及发展前景分析
- 【Linux】创建、修改和删除用户组(groupadd | groupmod | groupdel)
- 大数据时代的网络舆情(0710)
- 信奥题库(OI题库)8月月赛T1题解 幂次数