Não estou tendo sorte em fazer o Mockito capturar os valores dos argumentos da função! Estou zombando de um índice de mecanismo de pesquisa e, em vez de construir um índice, estou apenas usando um 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))
Não posso usar argumentos arbitrários porque estou testando os resultados das consultas (ou seja, quais documentos eles retornam). Da mesma forma, não quero especificar um valor específico e ter uma linha 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))
Eu olhei para a seção de retornos de chamada na página Usando o Mockito . Infelizmente, não é Java e eu não consegui fazer minha própria interpretação disso funcionar em Java.
EDITAR (para esclarecimento): Como faço para que o Mockito capture um argumento X e o transmita para minha função? Quero que o valor exato (ou ref) de X seja passado para a função.
Não quero enumerar todos os casos e o argumento arbitrário não funciona porque estou testando resultados diferentes para consultas diferentes.
A página Mockito diz
val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString }
Isso não é java, e eu não sei como traduzir para java ou passar o que aconteceu em uma função.
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))
deve configurar o objeto mock para você. O que acontece quando você ligareader.document(666)
?