簡體   English   中英

Mockito - 預期 0 個匹配器,記錄 1 個(InvalidUseOfMatchersException)

[英]Mockito - 0 Matchers Expected, 1 Recorded (InvalidUseOfMatchersException)

我正在嘗試模擬一些 mongo 類,這樣我就不需要連接(相當標准的東西),但是下面的代碼給我帶來了問題:

when(dbCollection.find(isA(DBObject.class))).thenReturn(dbCursor);

運行這個得到我:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
參數匹配器的使用無效!
預期 0 個匹配器,記錄 1 個:
在 ...GridFileManagerTest.beforeClass(GridFileManagerTest.java:67)

如果匹配器與原始值組合,則可能會發生此異常:
//不正確:someMethod(anyObject(), "raw String");

使用匹配器時,所有參數都必須由匹配器提供。
例如:
//正確的:
someMethod(anyObject(), eq("匹配器的字符串"));

有關更多信息,請參閱 Matchers 類的 javadoc。

如果我要這樣做:

when(dbCollection.find(mock(DBObject.class))).thenReturn(dbCursor);

它不再有這個問題。 這似乎並沒有完成我想要的 - 我想在使用 DBObject 類型的對象調用該方法時返回該值。

想法?

我認為您的結果與如果dbCollection不是 Mockito-mock (或者您的方法是靜態或最終方法)會發生的結果兼容。 這意味着在無法使用匹配器的地方使用匹配器; 因此“預期 0 個匹配器,記錄 1 個”。

如果你有默認參數,同樣的問題可以在 Scala 中重現。 看起來您為每個參數都提供了 any(),但您應該驗證方法定義沒有任何可能會搞砸的默認參數。

可能不相關,但是當我發現包私有方法時遇到了同樣的錯誤。 將其更改為 public 為我解決了這個問題。

在我的情況下,模擬方法是final 從方法簽名中刪除final解決了這個問題。

暫無
暫無

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

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