[英]Mockito - 0 Matchers Expected, 2 Recorded (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.