Mockito lorsque().thenReturn() ne fonctionne pas correctement
J'ai une classe A avec 2 fonctions:
la fonction a() qui retourne un nombre aléatoire.
la fonction b() qui appelle un() et retourne la valeur retournée.
Dans un test, j'ai écrit ceci:
A test = Mockito.mock(A.class)
Mockito.when(test.a()).thenReturn(35)
assertEquals(35,test.a())
assertEquals(35,test.b())
Le test échoue à la deuxième assertion. Quelqu'un sait-il pourquoi?
Pour être clair, ce n'est pas mon vrai code, mais un simple code pour expliquer mon problème
OriginalL'auteur tamird14 | 2015-10-14
Vous devez vous connecter pour publier un commentaire.
Depuis la classe
A
est l'objet de moqueries, toutes les invocations de méthode n'irez pas à l'objet réel.C'est pourquoi votre deuxième assertion échoue (je suppose que cela peut avoir renvoyé 0).
Solution:
Vous pourriez faire quelque chose comme
autre chose que vous pourriez
spy
commeoui, si vous voulez utiliser une véritable méthode, vous devez appeler
thenCallRealMethod
et voir cette stackoverflow.com/questions/28295625/mockito-spy-vs-mockC'est à vous de décider de coeur, pour se moquer ou lancer le réel de la méthode
OriginalL'auteur Sajan Chandran
Peut-être qu'il fait dans votre concrètes
A
, mais qui n'est pas utilisée dans ce cas. Seule la maquette est utilisée ici.De sorte que vous devez dire à la maquette que faire pour chaque méthode que vous voulez l'appeler:
OriginalL'auteur weston
Parce que vous avez seulement un simulacre, quand vous l'appelez avec ce test.un().
Vous devez ajouter
Mockito.when(test.b()).thenReturn(35)
. puis votre code fonctionne très bienne pouvez pas obtenir de vous
disons que j'ai une fonction b() qui appelle une(), prendre le nombre retourné et renvoie l'inverse de nombre (123 321 par exemple). Je veux tester cette fonction. Le problème est que je ne sais pas ce qu'est un() sera de retour, parce que c'est de l'aléatoire. Je tiens donc à faire un() retourne le nombre 123 (par exemple) donc je pourrais écrire dans le test assertEquals(321,A. b()). Je veux tester la fonction quand je sais ce qu'est un() renvoie, dans ce cas précis
Je pense que ce que vous avez besoin est quelque chose comme " Mockito.doAnswer(une nouvelle Réponse<Integer>() { @Override public Void réponse(InvocationOnMock invocation) throws Throwable { return 123 } }).quand(test).a();
Il échoue toujours dans la deuxième affirmer
OriginalL'auteur Jens