Mock的中文的意思就是模拟,Mockito是一个模拟对象框架,主要还是用于单元测试中,它通过隐藏真实的实现来返回我们期望的结果,这样我们就可以排除其它可能对当前单元的执行结果产生影响的其它因素,如我们的某个功能需要调用一个远程接口,但是这个时候我们只需要关心当前功能是否能够正常工作而不需要关心远程接口是否正常工作,我们就可以通过模拟远程接口返回的正确或者错误值进行测试。
这是两篇关于Mockito可以快速入门的文章:
http://blog.csdn.net/onlyqi/article/details/6396646
http://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代码就可以写成这样了:
@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是当前最流行的单元测试Mock框架。采用Mock框架,我们可以虚拟出一个外部依赖,降低测试组件之间的耦合度,只注重代码的流程与结果,真正地实现测试目的。正文,什么是Mock?Mock的中文译为仿制的,模拟的,虚假的。对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去。Mock测试就是在测试过程中,对于某些不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者不容易获取比较复
Mockito框架官方地址mockito,文档地址,中文版文档。
Mockito库能够Mock对象、验证结果以及打桩(stubbing)。
1. Mock和Mockito的关系
在软件开发中提及mock,通常理解为模拟对象。
为什么需要模拟? 在我们一开始学编程时,我们所写的对象通常都是独立的,并不依赖其他的类,也不会操作别的类。但实际上,软件中是充满依赖关系的,比如我们会基于service类写操作类,而service类又是基于数据访问类(DAO)的,依次下去,形成复杂的依赖关系。
@Test
public void test() {
Field apiField = UserServiceImpl.class.getDeclaredField("username");
FieldSetter.setField(userService, apiField, "1");
1概述 Mickito模拟器是主流的单元测试框架之一,它需要与Junit测试框架一起使用.2.相关概念2.1存根类(Stub) 存根(Stub)类是实现了一个接口或者抽象类的类,可以在测试过程中可以使用该类对象调用该类的方法进行测试.存根类的对象需要手动创建.如:Private PingAnEnterService pingAnEnterService = new Pin...
目录编辑1、什么是mock测试2、为什么要进行Mock测试3、Mock适用场景4、代码实例 5、参数方法说明6、简单测试 7、测试方法说明8、Mock静态方法9、提升测试覆盖率 Mock 测试就是在测试活动中,对于某些不容易构造或者不容易获取的比较复杂的数据/场景,用一个虚拟的对象(Mock对象)来创建用于测试的测试方法。 Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以,Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。 Mo
当使用PowerMockito.whenNew方法时,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是需要mock的new对象代码所在的类。
当需要mock final方法的时候,必须加注解@PrepareForTest和@RunWith。注解@PrepareForTest里写的类是final方法所在的类。
当需要moc
项目中,有些函数需要处理某个服务的返回结果,而在对函数单元测试的时候,又不能启动那些服务,这里就可以利用Mockito工具,其中有如下三种注解:
@InjectMocks:创建一个实例,简单的说是这个Mock可以调用真实代码的方法,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。
@Mock:对函数的调用均执行mock(即虚假函数),不执行真正部分。
@Spy:对函数的调用均...
如今关于私有方法是否应该做单元测试的争论正逐渐消停,开发者的普遍实践已经给出事实答案。通过公有方法间接测私有方法在很多情况下难以进行,开发者们更愿意通过修改方法可见性的办法来让原本私有的方法在测试用例中变得可测。
此外,在单元测试中时常会需要对被测对象进行特定的成员字段初始化,但有时由于被测类的构造方法限制,使得无法便捷的对这些字段进行赋值。那么,能否在不破坏被测类型封装的情况下,允许单元测试用例内的代