70 votos

mockito devoluciones de llamada y obtener los valores de los argumentos

No estoy teniendo ninguna suerte de llegar a Mockito a la función de captura de valores de argumento! Estoy burlando de un índice del motor de búsqueda y en lugar de construir un índice, estoy usando un hash.

// Fake index for solr
Hashmap<Integer,Document> fakeIndex;

// Add a document 666 to the fakeIndex
SolrIndexReader reader = Mockito.mock(SolrIndexReader.class);

// Give the reader access to the fake index
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))

Yo no uso arbitrario de argumentos porque estoy probando los resultados de las consultas (es decir, que los documentos se devuelven). Del mismo modo, no quiero especificar un valor específico y tienen una línea por cada documento!

Mockito.when(reader.document(0)).thenReturn(document(fakeIndex(0))
Mockito.when(reader.document(1)).thenReturn(document(fakeIndex(1))
....
Mockito.when(reader.document(n)).thenReturn(document(fakeIndex(n))

Miré a las devoluciones de llamada de la sección sobre el Uso de Mockito página. Por desgracia, no es Java y no pude conseguir mi propia interpretación de que para trabajar en Java.

EDIT (para aclarar): ¿Cómo puedo conseguir Mockito para capturar un argumento X y pasarlo a mi función? Quiero que el valor exacto (o ref) de X pasa a la función.

No quiero enumerar todos los casos, y el argumento arbitrario no trabajo porque estoy probando diferentes resultados para las distintas consultas.

El Mockito página dice

val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString } 

Que no es java, y no sé cómo traducir en java o pase lo que pasó en una función.

91voto

Ed Staub Puntos 7386

Yo nunca he usado Mockito, pero quiero aprender, así que aquí va. Si a alguien menos ignorante de lo que me responde, pruebe su respuesta primero!

Mockito.when(reader.document(anyInt())).thenAnswer(new Answer() {
 public Object answer(InvocationOnMock invocation) {
     Object[] args = invocation.getArguments();
     Object mock = invocation.getMock();
     return document(fakeIndex((int)(Integer)args[0]));
     }
 });

51voto

qualidafial Puntos 2095

Echa un vistazo ArgumentCaptors:

http://mockito.googlecode.com/svn/tags/1.8.0/javadoc/org/mockito/ArgumentCaptor.html

ArgumentCaptor<Integer> argument = ArgumentCaptor.forClass(Integer.class);
Mockito.when(reader.document(argument.capture())).thenAnswer(
  new Answer() {
    Object answer(InvocationOnMock invocation) {
      return document(argument.getValue());
    }
  });

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X