在昨天的彙報中,潘老師以爲講的偏離了中心,在講解了一番了之後,讓我從新修改,但我以爲那篇文章若要改爲這個題目,改動頗大,因此有了這篇文章。code
想要使用題目中的方法,必須得是一個mock的對象,而這能夠經過上面兩種方法生成,先來看看他兩的區別:
有一個類A對象
class A { public int add(int a , int b) { return a + b; } }
此時生成兩個對象it
A a = new A(); A a1 = Mockito.mock(A.class); A a2 = mockito.spy(a);
此時,經過mock生成的對象,會擁有之前的對象的全部方法,可是方法中都沒有了功能,就好比上面的a1
對應的類能夠理解下面這樣class
A1 extend A { pubic int add(int a, int b) { return null; } }
而a2
是同過調用clone()複製的,正常看來就和一個普通的對象如出一轍,只是他的方法可以進行模擬。mock
doReturn().when()是無反作用的。
when().thenReturn()是有反作用的
上面是比較官方的說法,用實際的例子來理解一下,mock
Mockito.when(a2.add(1,2 )).thenReturn(5);
此時上面的方法中,會先執行a + b
,即 1 + 2
, 結果本應是3,但因爲後面的thenReturn
,因此調用該方法時,實際的返回值是5。
而如果用另外一種方法方法
Mockito.doReturn(5).when(a2).add(1,2);
此時,就不會執行a+b
的操做,而會直接返回5。
看到這想必也明白了所謂的反作用,如果執行裏面的方法時,不免會產生影響,好比拋出異常等。異常