码迷,mamicode.com
首页 > 其他好文 > 详细

Mockito入门使用一例

时间:2014-06-14 10:16:42      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:mock   mockito   

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;
   结果两个属性都没有被注入
   

Mockito入门使用一例,布布扣,bubuko.com

Mockito入门使用一例

标签:mock   mockito   

原文地址:http://blog.csdn.net/fireofjava/article/details/30496179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!