95 votes

rappels mockito et obtention de 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 la section sur l' Utilisation de Mockito page. Malheureusement, il n'est pas Java et je ne pouvais pas obtenir ma propre interprétation de l'œuvre en Java.

EDIT (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.

Le 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.

111voto

Ed Staub Points 7386

Je n'ai jamais utilisé Mockito, mais je veux apprendre, alors voilà. Si quelqu'un moins ignorant que moi répond, essayez d'abord sa réponse!

 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]));
     }
 });
 

57voto

qualidafial Points 2095

Découvrez 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());
    }
  });
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X