Non ho alcuna fortuna nel convincere Mockito a catturare i valori degli argomenti della funzione! Sto prendendo in giro un indice del motore di ricerca e invece di costruire un indice, sto solo 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))
Non posso usare argomenti arbitrari perché sto testando i risultati delle query (cioè quali documenti restituiscono). Allo stesso modo, non voglio specificare un valore specifico per e avere una riga per ogni 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))
Ho esaminato la sezione dei callback nella pagina Using Mockito . Sfortunatamente, non è Java e non sono riuscito a far funzionare la mia interpretazione in Java.
EDIT (per chiarimenti): come faccio a convincere Mockito a catturare un argomento X e passarlo alla mia funzione? Voglio che il valore esatto (o ref) di X sia passato alla funzione.
Non voglio enumerare tutti i casi e l'argomento arbitrario non funzionerà perché sto testando risultati diversi per query diverse.
La pagina di Mockito dice
val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString }
Non è java, e non so come tradurre in java o passare quello che è successo in una funzione.
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))
dovrebbe impostare l'oggetto fittizio per te. Cosa succede quando chiamireader.document(666)
?