easymock 、mockito、powermock 參考:
easymock之後流行的mock工具。相對easymock學習成本低,而且具有非常簡潔的api,測試**的可讀性很高。
org.mockito
mockito-all
1.9.5
test
使用mockito大致可以劃分為以下幾個步驟:
① 使用 mockito 生成 mock 物件;
② 定義(並非錄製) mock 物件的行為和輸出(expectations部分);
③ 呼叫 mock 物件方法進行單元測試;
④ 對 mock 物件的行為進行驗證。
現在用乙個例子來簡單呈現以上的步驟:
首先靜態匯入mockito的方法:
import static org.mockito.mockito.*;
@test
public void testmockmethod()
而如果要驗證呼叫順序可以如下控制:
@test
public void testmockmethodinorder()
在之前的介紹的模擬操作中,我們總是去模擬一整個類或者物件,對於沒有使用 when().thenreturn()方法指定的函式,系統會返回各種型別的預設值(具體值可參考官方文件)。而區域性模擬建立出來的模擬物件依然是原系統物件,雖然可以使用方法when().thenreturn()來指定某些具體方法的返回值,但是沒有被用此函式修改過的函式依然按照系統原始類的方式來執行,下面對非區域性模擬和區域性模擬分別舉例來說明:
@test
public void testskipexpect()
上面的**省略了expectations部分(即定義**行為和輸出),執行該測試可以看到hello方法預設返回null(show方法本來就是無返回值的),而且在控制台中兩個方法都沒有輸出任何語句。
mockito的區域性模擬有兩種方式,一種是docallrealmethod()方式,另一種是spy()方式。
@test
public void testcallrealmethod ()
執行這個測試會發現在執行hello("z3")時會執行原有的**,而執行hello("l4")時則是返回預設值null且沒有輸出列印,執行show()同樣沒有輸出列印。
@test
public void testspy()
執行這個測試會發現在執行hello("z3")時會執行原有的**,但是執行show()時在控制台中沒有列印語句。
但值得注意的是在mockito的psy()方式模擬中expectations部分使用的語法不同,執行起來存在微妙的不同,如下:
@test
public void testspy2()
上面的**雖然能順利執行,但在控制台中輸出了hello z3,說明實際的**仍然執行了,只是mockito在最後替換了返回值。但下面的**就不會執行實際的**:
@test
public void testspy3()
mockito 外部介面 Mockito入門
mock使用 mock主要在單元測試的時候用來模擬外部依賴介面的返回,即method stub的作用。一般而言,在常見的單元測試的編寫中,通過mock外部依賴來使得待測試的 能往下執行。在單測中,莫過於以下三個步驟,確定目標 構造條件 驗證mock場景 mock物件 mock方法 物件方法 靜態方法...
Mockito初探 快速入門
mockito是基於cglib 實現打樁。它通過攔截物件的所有操作方法,對於滿足打樁條件的呼叫,返回預設的返回值。用於標記物件屬性允許用mock或spy注入。嘗試通過按 先建構函式注入再setter注入最後屬性 字段 注入 的順序注入依賴。用於標記乙個mock欄位,被標記的物件將被建立為mock物件...
Mockito框架Mock Void方法
在編寫 時,總是有方法返回void,並且在某個測試用例需要模擬void方法。那麼我們如何去做呢?讓我們一起在下面的內容中使用mockito完成這個需求。mockito是用於編寫單元測試的最著名的模擬框架之一。假設我們有乙個方法a,在此方法中,使用了另乙個void方法b。現在,當要為該方法編寫測試用例...