342 votes

Mockito peut-il remplacer une méthode sans tenir compte de l'argument?

Je suis en train de tester un code existant, à l'aide de Mockito.

Je veux un stub FooDao qui est utilisé dans la production comme suit:

foo = fooDao.getBar(new Bazoo());

Je peux écrire:

when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);

Mais le problème évident est qu' getBar() n'est jamais appelé avec le même Bazoo objet que j'ai écrasé la méthode. (La malédiction qu' new de l'opérateur!)

J'aimerais si je pouvais talon la méthode d'une manière qu'il renvoie myFoo , indépendamment de l'argument. À défaut, je vais écouter d'autres solution de contournement des suggestions, mais j'aimerais vraiment éviter de modifier le code de production jusqu'à ce qu'il est raisonnable de couverture de test.

513voto

Tomasz Nurkiewicz Points 140462
 when(
  fooDao.getBar(
    any(Bazoo.class)
  )
).thenReturn(myFoo);
 

ou (pour éviter null s):

 when(
  fooDao.getBar(
    (Bazoo)notNull()
  )
).thenReturn(myFoo);
 

N'oubliez pas d'importer des correspondants (beaucoup d'autres sont disponibles):

 import static org.mockito.Matchers.*;
 

19voto

Buhb Points 3110

http://mockito.googlecode.com/svn/tags/1.7/javadoc/org/mockito/Matchers.html

anyObject devrait répondre à vos besoins.

En outre, vous pouvez toujours envisager d'implémenter hashCode et equals pour la classe Bazoo. Cela ferait que votre exemple de code fonctionne comme vous le souhaitez.

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