您的位置:首页 > 其它

Mockito入门使用一例

2014-06-13 16:08 337 查看
Mock的使用有很多方式,我们常用的有以下几种,看示例代码

public class TestMock {
@Mock
A a;//生成一个A的Mock
@Spy
A a1 = new A();//生成一个A的Spy, Spy或是InjectMocks必需自己初始化对象,Mock可以不用初始化

@Before
public void init(){
MockitoAnnotations.initMocks(this);//初使化Mock
}

@Test
public void testGo(){
Mockito.when(a.go()).thenReturn(false);//做mock,当调用go方法时,直接返回false
Assert.assertFalse(a.go());//结果 false, 控制台没有输出gogogo

//做mock,当调用go方法时,直接返回false,但是a1是spy,
//spy的意思是如果有mock就调用mock方法,如果没有mock就调用真实的方法,
//这个时候go还没有被mock,所以会输出gogogo
Mockito.when(a1.go()).thenReturn(false);
Assert.assertFalse(a.go());//结果是false

//这样子mock,就不会输出gogogo
Mockito.doReturn(false).when(a).go();
Assert.assertFalse(a.go());//结果是false

//注:如果go是一个final的方法, 你会发现无论如何都mock不了,一定会调用真实的方法,这说明mock出来的代理类无法重写这个方法
}
}

class A {
public boolean go(){
System.out.println("gogogo");
return true;
}
}


另外还一个注解

@InjectMocks 这个注解不会把一个类变成mock或是spy,但是会把当前对象下面的Mock/Spy类注入进去,按类型注入

关于注入有一些要注意

1. 当一个类依赖的是一个父类,你mock一个子类去注入也是可以的

2. 注入是按类型而不是变量名

3. 如果主类有两个属性是类一种类型,比如A里面有两个属性

   private B b1;

   private B b2;

   我们有一个mock

   @Mock

   B b;

   这时个两个属性都被注入同样的值

   如果有两个Mock

   @Mock

   B b1;

   @Mock

   B b2;

   结果两个属性都没有被注入

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mock mockito