[mockito使用教程]部分/內部方法
- 2019 年 12 月 20 日
- 筆記
spy
spy會創建一個真實的對象,對象的方法都會被調用,除非你將某個方法打樁(stage),這個方法才不執行,走mock數據,下面是例子。
List list = new LinkedList(); List spy = spy(list); //對size打樁: when(spy.size()).thenReturn(100); //執行真實的方法 spy.add("one"); spy.add("two"); //列印 "one" System.out.println(spy.get(0)); //size() 被打樁 - 列印100 System.out.println(spy.size()); //可以做以下校驗 verify(spy).add("one"); verify(spy).add("two");注意when(spy.size()).thenReturn(100);這個打樁方法會執行這段程式碼,如果程式不要執行這個方法,直接打樁,可以使用doReturn(100).when(spy).size()。
List list = new LinkedList(); List spy = spy(list); //會執行spy.get(0)方法導致 throws IndexOutOfBoundsException when(spy.get(0)).thenReturn("foo"); //採用 doReturn() 打樁 doReturn("foo").when(spy).get(0);doCallRealMethod
對於mock的對象,它的所有方法都會被打樁,不執行真實方法,除非使用doCallRealMethod。例子
Foo mock = mock(Foo.class); doCallRealMethod().when(mock).someVoidMethod(); // 會執行實現方法 Foo.someVoidMethod() mock.someVoidMethod();
內部方法
如果想mock一個類的內部方法,實際就是該類某些方法執行真實邏輯,某些方法執行mock打樁,由以上兩種方式都能實現。
