簡體   English   中英

如何驗證Mockito中的所有方法調用?

[英]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)但是:

  1. 我必須在每種方法中都這樣做
  2. 我必須重復與在when使用的相同的論點

是否有任何方法可以簡單地驗證,如果所有在when注冊的方法實際上被調用? EasyMock以這種方式工作,非常方便......

如果我有很多完全相同的調用,我只使用commonMocking方法,將驗證放在那里並在需要的地方重用它。 然后我將verfies保留在實際測試中 - 這使得每個測試用例之間的實際差異更具可讀性。

我認為這是不可能的。 是一個舊的討論,其中兩位維護者正在陳述他們對這樣一個功能的看法。 討論已經很久了,但據我所知,目前的Mockito版本仍然沒有支持。

在Mockito中,驗證是明確的。 因此,您基本上驗證(斷言)是否已經發生了特定的調用,並且您可以選擇要檢查的重要內容。 Mockito在存根和模擬功能之間也有更強的分離。 因此,它允許您存根一些調用,以使代碼通過您想要的路徑,而無需驗證調用是否已發生。 此外,除非您對Mockito為您提供的默認值感到滿意,否則您沒有義務進行子調用。

這種方法將測試設置邏輯與測試驗證分開,更好地提高了可讀性。

關於為什么mockito不會促進驗證存根方法的幾句話。

  1. 簡化。 在過去,當模擬框架廣為人知時,我們一直在手寫我們的存根。 但我不記得我們想要驗證存根實際被調用的單個案例。 原因很簡單:存根方法被隱式驗證:存根值在處理中是必不可少的。

  2. 我看到測試中沒有分離茬和“期待”實際上是有害的。 開發人員增加了返回值期望,因為模擬了UnexpectedOperation。 但是他沒有檢查mock返回的值是否真的被使用了...簡化存根會使重點更有趣:如果正確使用了存根值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM