Mockito框架Mock Void方法

2021-10-14 15:33:34 字數 2556 閱讀 6132

在編寫**時,總是有方法返回void,並且在某個測試用例需要模擬void方法。那麼我們如何去做呢?讓我們一起在下面的內容中使用mockito完成這個需求。

mockito是用於編寫單元測試的最著名的模擬框架之一。

假設我們有乙個方法a,在此方法中,使用了另乙個void方法b。現在,當要為該方法編寫測試用例時,我們如何測試b方法被呼叫?另外,是否將正確的引數傳遞給b方法?在這種情況下,mockito可以幫助我們解決這個問題。

讓我們舉個例子,我們有乙個userservice類。在此類中,我們有乙個updatename()方法。

public userservice

}

現在,我們要為userservice類編寫單元測試並模擬userrepository。但是,在此測試用例中,我們唯一需要驗證的是使用正確的引數集呼叫了userrepository中的updatename()方法。為此,我們需要模擬updatename()方法,捕獲引數並驗證引數。

這裡要注意的最重要的是,我們不能僅僅使用mockito的when-then機制來模擬void方法。因為,mockitowhen()方法適用於返回值,而方法返回值是void時則不適用。

在mockito中,我們可以使用不同的方法來呼叫例項方法或模擬void方法。根據要求使用其中乙個選項:

donothing():完全忽略對void方法的呼叫,這是預設

doanswer():在呼叫void方法時執行一些執行時或複雜的操作

dothrow():呼叫模擬的 void方法時引發異常

docallrealmethod():不要模擬並呼叫真實方法

使用donothing()

如果我們只想完全忽略void方法呼叫,則可以使用donothing()

在測試用例中,對於模擬物件的每種方法,donothing是預設行為。因此,如果不想驗證引數,則使用donothing是完全可以的。

@test

public

void

test001()

不對空方法使用donothing():

@test

public

void

test002()

@test

public

void

testupdatenameusingargumentcaptor()

doanswer()用於void方法

如果我們不想呼叫真實方法,則需要執行一些執行時操作,請使用doanswer()

@test

public

void

testupdatenameusingdoanswer()

).when

(mockeduserrepository)

.updatename

(anylong()

,anystring()

);userservice.

updatename

(1l,

"funtester");

verify

(mockeduserrepository,

times(1

)).updatename

(1l,

"funtester");

}

使用dothrow()引發異常

如果要在呼叫方法時引發異常,則可以使用嘲笑的dothrow()方法。

@test

(expected = invalidparamexception.

class

)public

void

testupdatenamethrowexceptionwhenidnull()

使用docallrealmethod()進行真實方法呼叫

有時有必要從模擬物件中呼叫真實方法,在這種情況下,我們需要使用docallrealmethod(),因為donothig()是預設行為。

@test

public

void

testupdatenamecallrealrepositorymethod()

mockito 外部介面 Mockito入門

mock使用 mock主要在單元測試的時候用來模擬外部依賴介面的返回,即method stub的作用。一般而言,在常見的單元測試的編寫中,通過mock外部依賴來使得待測試的 能往下執行。在單測中,莫過於以下三個步驟,確定目標 構造條件 驗證mock場景 mock物件 mock方法 物件方法 靜態方法...

使用mockito框架來測試私有方法

這裡舉乙個稍微複雜一點的例子 前段時間在看mybatis3.5.1的原始碼,原始碼本身所帶的單元測試用到了mockito框架 一 問題說明 看到這個方法,1.我會想到需要傳遞乙個list。這個好辦 該類只有乙個帶參構造方法 這幾個引數傳進去又會遇到問題,因為sqlcommand和method拿到傳的...

mockito基本用法

easymock mockito powermock 參考 easymock之後流行的mock工具。相對easymock學習成本低,而且具有非常簡潔的api,測試 的可讀性很高。org.mockito mockito all 1.9.5 test 使用mockito大致可以劃分為以下幾個步驟 使用 ...