[mockito使用教程]部分/內部方法

  • 2019 年 12 月 20 日
  • 筆記

mockito有兩種API實現部分/內部方法mock,分別是spy與callRealMethod()。

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打樁,由以上兩種方式都能實現。

Tags: