mockito rappels et d'obtenir des valeurs d'argument
Je ne suis pas du tout avoir la chance d'obtenir Mockito à la fonction de capture des valeurs d'argument! Je me suis moqué d'un index de moteur de recherche et au lieu de construire un indice, je suis juste en utilisant une table de hachage.
//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))
Je ne peux pas utiliser des arguments arbitraires parce que je suis en essais les résultats des requêtes (c'est à dire les documents qu'ils de retour). De même, je ne veux pas spécifier une valeur spécifique et d'avoir une ligne pour chaque document!
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))
J'ai regardé les rappels de l'article sur le À L'Aide De Mockito page. Malheureusement, il n'est pas Java et je ne pouvais pas obtenir ma propre interprétation de l'œuvre en Java.
MODIFIER (pour des précisions):
Comment puis-je obtenir Mockito pour capturer un argument X et la passer dans ma fonction? Je veux que la valeur exacte (ou une référence) de X transmis à la fonction.
Je ne veux pas énumérer tous les cas, et à l'arbitraire argument ne fonctionnera pas parce que je suis en essais pour des résultats différents pour les différentes requêtes.
La Mockito page dit
val mockedList = mock[List[String]]
mockedList.get(anyInt) answers { i => "The parameter is " + i.toString }
Ce n'est pas java, et je ne sais pas comment le traduire en java ou transmettre tout ce qui s'est passé dans une fonction.
- Je ne suis pas sûr de comprendre exactement ce qui est un échec pour vous. Votre appel à
Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))
devrait installation de la maquette de l'objet pour vous. Ce qui se passe lorsque vous appelezreader.document(666)
? - Le 666 fonctionne très bien. Cependant, je voudrais être en mesure de passer dans un nombre X et obtenir le résultat de fakeIndex(X). J'ai un grand nombre de docs pour tester les requêtes, et je ne veux pas entrer dans tous les.
Vous devez vous connecter pour publier un commentaire.
Je n'ai jamais utilisé Mockito, mais l'envie d'apprendre, donc voilà. Si quelqu'un de moins paumé que moi des réponses, essayer de leur répondre d'abord!
Découvrez ArgumentCaptors:
http://site.mockito.org/mockito/docs/1.10.19/org/mockito/ArgumentCaptor.html
ArgumentCaptor
s pour cogner. Il y a un grand ol' avertissement à ce sujet dans ce lien si. Procéder avec prudence.Vous pourriez vouloir vérifier() en combinaison avec la ArgumentCaptor pour assurer l'exécution dans le test et la ArgumentCaptor pour évaluer les arguments:
L'argument valeur est évidemment accessible via l'argument.getValue() pour plus de manipulation /vérification ou ce que vous voulez faire.
Avec Java 8, cela pourrait être quelque chose comme ceci:
Je suis en supposant que
document
est une carte.