¡No tengo suerte para que Mockito capture valores de argumentos de función! Me estoy burlando de un índice de motor de búsqueda y en lugar de construir un índice, solo 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))
No puedo usar argumentos arbitrarios porque estoy probando los resultados de las consultas (es decir, qué documentos devuelven). Del mismo modo, no quiero especificar un valor específico y tener una línea para 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é la sección de devoluciones de llamada en la página Uso de Mockito . Desafortunadamente, no es Java y no pude hacer que mi propia interpretación de eso funcione en Java.
EDITAR (para aclarar): ¿Cómo consigo que Mockito capture un argumento X y lo pase a mi función? Quiero que el valor exacto (o referencia) de X se pase a la función.
No quiero enumerar todos los casos, y el argumento arbitrario no funcionará porque estoy probando diferentes resultados para diferentes consultas.
La página de Mockito dice
val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString }
Eso no es Java, y no sé cómo traducir a Java o pasar lo que sea que haya pasado a una función.
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))debería configurar el objeto simulado por ti. ¿Qué pasa cuando llamasreader.document(666)?