2012-07-12 3 views
6

Próbuję mock up niektórych klas Mongo tak, że nie potrzebują połączenia (dość standardowe rzeczy), ale następujący kod daje mi problemy:Mockito - 0 dopasowujących oczekiwaniami 1 rejestrowana (InvalidUseOfMatchersException)

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

Running to get mnie:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Nieprawidłowe użycie dopasowujących argumentów!
0 dopasowujących oczekiwane, 1 zarejestrowane:
w ... GridFileManagerTest.beforeClass (GridFileManagerTest.java:67)

Wyjątek może wystąpić, jeśli dopasowujące są połączone z wartościami wyjściowymi:
// prawidłowe: SomeMethod (anyObject(), "raw String");

Podczas korzystania z dopasowań wszystkie argumenty muszą być dostarczone przez osoby dopasowujące.
Na przykład:
// poprawne:
someMethod (anyObject(), eq ("String by matcher"));

Aby uzyskać więcej informacji, zobacz javadoc dla klasy Matchers.

Gdybym miał zrobić to jednak:

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

już nie ma tego problemu. Wydaje się, że nie osiąga to, co chcę - chcę zwrócić wartość, gdy metoda jest wywoływana z obiektem typu DBObject.

Myśli?

+0

Zobacz część "[EDYCJA]" pierwszej odpowiedzi. Może masz ten sam problem? http://stackoverflow.com/questions/10828843/powermockito-got-invaliduseofmatchersexception-when-use-matchers-mocking-static – bezmax

+0

, więc czy DBCollection jest obiektem makiety Mockito? –

Odpowiedz

13

Myślę, że twoje wyniki są zgodne z wynikiem, który stałby się, gdyby dbCollection nie było symulacją makiety (lub twoja metoda jest statyczna lub ostateczna). Oznaczałoby to, że matcher jest używany tam, gdzie nie można go użyć; stąd "0 matchers expected, 1 recorded".

+0

To jest makiety (DBCollection.class) – Paul

+2

Ale (zakładając, że jest to MongDB) wygląda jak [DBCollection # find() '] (http://api.mongodb.org/java/2.6/com/mongodb/DBCollection. html # find (com.mongodb.DBObject)) jest ostateczna, co daje ten sam efekt. Nie możesz wyśmiać ostatecznych metod bez użycia [PowerMock] (http://code.google.com/p/powermock/). –

+0

Jest to rzeczywiście ostateczna metoda, dzięki za wyjaśnienie tego dla mnie! – Paul