cogner les méthodes qui manipule les paramètres avec mockito
J'ai la situation suivante:
class Worker {
public Integer somework() {
Integer k=0;
Helper h= new Helper();
h.change(k);
return k;
}
}
class Helper {
public void change(Integer k) {
//k = Some calcs
}
}
Je suis en train de faire unitests pour Worker
et évidemment, j'en veux pour se moquer de Helper
classe de façon à ce que son change
méthode sera toujours de mettre 1 dans k
.
Ma véritable situation est plus compliquée, mais ce code représente le problème. Merci pour l'aide.
Vous devez vous connecter pour publier un commentaire.
Je voudrais changer la signature de la méthode et de l'inciter à prendre une
Helper
exemple comme argument. L'appelant créer de l'accompagnateur et de le passer à lasomework
méthode. Le test de passer à un simulacre d'aide.Si ce n'est pas possible, à moins d'appeler une méthode fabrique protégée pour créer de l'aide, et se moquer de cette méthode de fabrique lors de l'essai de la
somework
méthode pour faire revenir un simulacre helper:J'ai une méthode de définition comme ceci:
Je vais vous montrer comment vous pouvez modifier/modifier le "out"(StringWriter) de référence.
Maintenant, lorsque vous faites l'appel comme:
la valeur de Stringbuffer ref dans msgBodyWriter sera "message Électronique", indépendamment de valeur antérieure.
À @JB Nizet point, oui, il est bon de revoir pour la testabilité. Souvent refactoring pour rendre le code plus testable conduit à un code qui est mieux pour d'autres raisons - la séparation des préoccupations et ces. Il n'est pas toujours possible de le faire. Dire que c'est pas votre code, ou vous avez une autre disposition de la laisser seule (parce que beaucoup d'autres classes s'appuient sur la façon dont il est) ou que ce soit.
Si je comprends bien ce que vous devez faire, je pense que vous pouvez le faire avec un espion:
Puis utilisez le spiedWorkerUT au lieu de la workerUnderTest à l'exécution de vos tests.
Il n'est pas toujours possible d'éviter l'instanciation de quelque chose que vous voulez pour se moquer. Pour cela, il est PowerMock.
mockHelper
à changer son comportement lors de lachange
méthode est appelée à partir deWorker
. Il est facile à atteindre avec hériter de certainsmockHelper
deHelper
et remplacerchange
méthode, mais peut-être mockito peut m'aider sans nouvelle classe?k
)Je pense que doAnswer est la meilleure façon de traiter avec la méthode void où la méthode manipule les paramètres donnés.
Fondamentalement, après les arguments que vous pouvez faire toutes les modifications que vous souhaitez. Il y a un post de blog l'expliquer un peu.