2012-07-12 21 views
6

Estoy tratando de burlarse de algunas clases mongo para que yo no necesito una conexión (cosas bastante estándar), pero el siguiente código me da problemas:Mockito - 0 comparadores esperados, 1 grabados (InvalidUseOfMatchersException)

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

Correr me es esto llegar:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
uso no válido de comparadores de argumentos!
0 comparadores esperados, 1 grabado:
en ... GridFileManagerTest.beforeClass (GridFileManagerTest.java:67)

Esta excepción se puede producir si comparadores se combinan con valores en bruto:
// incorrecto: algunMetodo (anyObject(), "cadena sin procesar");

Al usar los mezcladores, todos los argumentos deben ser provistos por los emparejamientos.
Por ejemplo:
// correcto:
someMethod (anyObject(), eq ("Cadena por coincidencia"));

Para obtener más información, consulte javadoc para la clase Matchers.

Si tuviera que hacer esto sin embargo:

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

ya no tiene ese problema. Sin embargo, esto no parece lograr lo que quiero, quiero devolver el valor cuando se llama al método con un objeto de tipo DBObject.

¿Pensamientos?

+0

Vea la parte '[EDIT]' de la primera respuesta. Tal vez tienes el mismo problema? http://stackoverflow.com/questions/10828843/powermockito-got-invaliduseofmatchersexception-when-use-matchers-mocking-static – bezmax

+0

¿Es DBCollection un objeto falso de Mockito? –

Respuesta

13

Creo que sus resultados son compatibles con el resultado que ocurriría si dbCollection no es un simulacro falso (o su método es estático o final). Eso significaría que se usa un matcher donde no se puede usar ninguno; de ahí los "0 emparejadores esperados, 1 registrado".

+0

Es un simulacro (DBCollection.class) – Paul

+2

Pero (asumiendo que esto es MongDB) parece ['DBCollection # find()'] (http://api.mongodb.org/java/2.6/com/mongodb/DBCollection. html # find (com.mongodb.DBObject)) es final, lo que tiene el mismo efecto. No puede simular métodos finales sin utilizar [PowerMock] (http://code.google.com/p/powermock/). –

+0

Es de hecho un método final, ¡gracias por aclarar eso para mí! – Paul