[英]How to verify all method calls in Mockito?
我使用Mockito測試的幾種方法進行了JUnit測試。 我對EasyMock有很多經驗(盡管不是最近的)所以我就這樣組織了:
@Before
public void before() {
myAPI = mock(MyAPI.class);
}
@After
public void after() {
verify(myAPI);
reset(myAPI);
}
如果需要,這些方法會在mock上注冊一些調用。
但我有一個例外:
org.mockito.exceptions.misusing.UnfinishedVerificationException:這里缺少驗證(mock)的方法調用: - > at de.datev.shared.spdvz.util.UserInfoUtilTest.after(UserInfoUtilTest.java:45)
正確驗證的示例:驗證(模擬).doSomething()
我知道我可以verify(myAPI).doSomething(someArgs)
但是:
when
使用的相同的論點 是否有任何方法可以簡單地驗證,如果所有在when
注冊的方法實際上被調用? EasyMock以這種方式工作,非常方便......
如果我有很多完全相同的調用,我只使用commonMocking方法,將驗證放在那里並在需要的地方重用它。 然后我將verfies保留在實際測試中 - 這也使得每個測試用例之間的實際差異更具可讀性。
我認為這是不可能的。 這是一個舊的討論,其中兩位維護者正在陳述他們對這樣一個功能的看法。 討論已經很久了,但據我所知,目前的Mockito版本仍然沒有支持。
在Mockito中,驗證是明確的。 因此,您基本上驗證(斷言)是否已經發生了特定的調用,並且您可以選擇要檢查的重要內容。 Mockito在存根和模擬功能之間也有更強的分離。 因此,它允許您存根一些調用,以使代碼通過您想要的路徑,而無需驗證調用是否已發生。 此外,除非您對Mockito為您提供的默認值感到滿意,否則您沒有義務進行子調用。
這種方法將測試設置邏輯與測試驗證分開,更好地提高了可讀性。
和
關於為什么mockito不會促進驗證存根方法的幾句話。
簡化。 在過去,當模擬框架廣為人知時,我們一直在手寫我們的存根。 但我不記得我們想要驗證存根實際被調用的單個案例。 原因很簡單:存根方法被隱式驗證:存根值在處理中是必不可少的。
我看到測試中沒有分離茬和“期待”實際上是有害的。 開發人員增加了返回值期望,因為模擬了UnexpectedOperation。 但是他沒有檢查mock返回的值是否真的被使用了...簡化存根會使重點更有趣:如果正確使用了存根值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.