使用Mockito对类成员变量进行Mock
2013-11-20 13:11
1516 查看
Mock的中文的意思就是模拟,Mockito是一个模拟对象框架,主要还是用于单元测试中,它通过隐藏真实的实现来返回我们期望的结果,这样我们就可以排除其它可能对当前单元的执行结果产生影响的其它因素,如我们的某个功能需要调用一个远程接口,但是这个时候我们只需要关心当前功能是否能够正常工作而不需要关心远程接口是否正常工作,我们就可以通过模拟远程接口返回的正确或者错误值进行测试。
这是两篇关于Mockito可以快速入门的文章:
http://blog.csdn.net/onlyqi/article/details/6396646 http://blog.csdn.net/onlyqi/article/details/6546589[/code]
这其中介绍了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代码就可以写成这样了:@Test public 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代码就会如下:@Test public 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); //...... }
比较上面的两种方式,还是第二种比较通用,不会受到变量的可见性的影响。
相关文章推荐
- 使用Mockito进行单元测试【1】——mock and verify
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
- 使用结构中的成员变量在oc 中进行数据传递
- 使用构造方法对student类的成员变量进行初始化
- 使用Mockito进行单元测试【1】——mock and verify[转]
- 使用MRUnit,Mockito和PowerMock进行Hadoop MapReduce作业的单元测试
- KVC的使用(对一个对象的成员变量进行操作(赋值/取值))
- 使用MRUnit,Mockito和PowerMock进行Hadoop MapReduce作业的单元测试
- 使用MOCK对象进行单元测试
- 安装AIC准则使用前进法后退法和逐步回归法进行变量选择的r语言代码
- 使用MJExtention替换数据字典中关键字和模型中成员变量名不同的问题
- Java使用反射来获取成员变量泛型信息
- 去掉thymeleaf 模板使用'$'符号进行后台变量取值时显示的红色波浪线
- 耐人寻味的数值类数据交换:不使用第三方变量进行数据交换
- 按钮的基本使用(不能直接访问对象的 结构体属性 的成员变量\)
- Java单元测试之模拟利器-使用PowerMock进行Mock测试
- 利用反射对修饰符为final的成员变量进行修改
- 题目要求:将a,b两个数的值进行交换,并且不使用任何的中间变量。
- 建议151:使用事件访问器替换公开的事件成员变量
- hadoop中使用Mockito进行单元测试