在編寫**時,總是有方法返回void
,並且在某個測試用例需要模擬void
方法。那麼我們如何去做呢?讓我們一起在下面的內容中使用mockito
完成這個需求。
mockito是用於編寫單元測試的最著名的模擬框架之一。
假設我們有乙個方法a,在此方法中,使用了另乙個void方法b。現在,當要為該方法編寫測試用例時,我們如何測試b方法被呼叫?另外,是否將正確的引數傳遞給b方法?在這種情況下,mockito可以幫助我們解決這個問題。
讓我們舉個例子,我們有乙個userservice類。在此類中,我們有乙個updatename()方法。
public userservice
}
現在,我們要為userservice
類編寫單元測試並模擬userrepository
。但是,在此測試用例中,我們唯一需要驗證的是使用正確的引數集呼叫了userrepository
中的updatename()
方法。為此,我們需要模擬updatename()
方法,捕獲引數並驗證引數。
這裡要注意的最重要的是,我們不能僅僅使用mockito
的when-then機制來模擬void方法。因為,mockito
的when()
方法適用於返回值,而方法返回值是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大致可以劃分為以下幾個步驟 使用 ...