java入門學習:mockito之@Mock和@InjectMock
阿新 • • 發佈:2019-01-02
Mockito是java單元測試中,最常用的mck工具之一,提供了諸多打樁方法和註解。其中有兩個比較常用的註解,@Mock和@InjectMock,名字和在程式碼中使用 的位置都很像,對於初學者,很容易誤解。下面花一點時間,做個簡單的介紹。
介紹之前,首先要明確一點:@Mock和@InjectMock這兩個註解除了名字和使用方式比較像之外,是在功能上無任何可類比性的完全不同的東西。
@Mock:
在Mockito中用於建立mock物件,使用方法如下:
@Mock
private ClassName mockedObject;
上面程式碼建立了一個名為mockedObject,型別為ClassName的mock物件,該物件所有的方法被置空,根據測試程式碼邏輯的需要使用
@InjectMock:
這是一個注入mock物件的操作,參考如下程式碼:
@Mock
private ClassName mockedObject;
@InjectMock
private TestedClass TestedObj = new TestedClass();
這段程式碼中,@InjectMock下面聲明瞭一個待測試的物件,若該物件有型別為ClassName的成員變數,@Mock定義的mock物件將會被注入到這個待測試的物件中,既TestedObj的型別為ClassName的成員被直接賦值為mockedObject。(熟悉依賴注入的同學應該很容易理解)
補充幾點:
2.Mokcito的mock()方法功能與@Mock相同,只是使用方式和場景不同。同樣的,@Spy也對應一個spy()方法。
[email protected]和@Spy註解的物件,均可被@InjectMock注入到待處理的物件中。