2012-07-12 64 views
6

我想,這樣我不需要連接(相當標準的東西),但下面的代碼來模仿一些蒙戈班給我的問題:的Mockito - 0匹配器預計,1錄(InvalidUseOfMatchersException)

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(「String by matcher」));

欲瞭解更多信息請參閱的javadoc匹配器類。

如果我要做到這一點,雖然:

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

它不再有這個問題。這似乎並沒有達到我想要的,但 - 我想返回時調用該方法與類型DBOBJECT的對象的值。

的思考?

+0

參見'[編輯]'第一答案的一部分。也許你有同樣的問題? http://stackoverflow.com/questions/10828843/powermockito-got-invaliduseofmatchersexception-when-use-matchers-mocking-static – bezmax 2012-07-12 19:28:32

+0

所以是一個DBCollection模擬的Mockito對象? – 2012-07-12 22:52:51

回答

13

我覺得你的結果與結果相兼容,將發生,如果dbCollection不是的Mockito - 模擬(或你的方法是靜態的或最終)。這意味着一個匹配器正在被使用,哪裏都不能使用;因此「0匹配者預期,1記錄」。

+0

這是一個模擬(DBCollection.class) – Paul 2012-07-13 14:21:48

+2

但(assumning這是MongDB),它看起來像['DBCollection#查找()'](http://api.mongodb.org/java/2.6/com/mongodb/DBCollection。 html#find(com.mongodb.DBObject))是final,它具有相同的效果。如果不使用[PowerMock](http://code.google.com/p/powermock/),則無法模擬最終方法。 – 2012-07-13 18:18:43

+0

這確實是一個最後的方法,感謝澄清我! – Paul 2012-07-13 19:15:56

相關問題