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; } }
原文地址:http://blog.csdn.net/fireofjava/article/details/30496179