À l'aide de Mockito de se moquer d'une méthode de classe à l'intérieur d'une autre classe
Je suis en train d'écrire des tests unitaires avec Mockito /JUnit pour une fonction comme ceci:
class1 {
method {
object1 = class2.method //method that I want to fake the return value
//some code that I still want to run
}
}
Est-il de toute façon Mockito à talon la suite de classe2.méthode? Je suis en train d'essayer d'améliorer la couverture de code pour class1 j'ai donc besoin d'appeler le réel de ses méthodes de production.
J'ai regardé dans le Mockito API à son espion méthode, mais qui serait de remplacer l'ensemble de la méthode et non pas la partie que je veux.
OriginalL'auteur Chang Liu | 2015-07-23
Vous devez vous connecter pour publier un commentaire.
Je pense que je suis la compréhension de votre question. Permettez-moi de reformuler, vous avez une fonction que vous êtes en train de tester, et l'envie de se moquer des résultats d'un appel de fonction à l'intérieur de cette fonction, mais dans une autre classe. J'ai manipulé que de la manière suivante.
Ce que cela fait est que dans la fonction enveloppé avec le @Avant d'annotation, je suis en train de la façon dont je veux les fonctions de la classe 2 pour réagir à des entrées spécifiques. Puis, à partir de l'intérieur de l'essai proprement dit, je suis juste l'appel de la fonction que je suis en train de tester dans la classe que je veux tester. Dans ce cas, le myClass.functionCall() est en cours d'exécution à travers comme d'habitude, et vous n'êtes pas d'écraser l'un de ses méthodes, mais vous êtes juste se moquer de la sorties qu'il obtient à partir des méthodes (ou méthode) dans MyClass2.
myClass
n'est jamais déclarée ou initialisé, et class2 n'est jamais passé. 2) L'annotation de la classe@Begin
n'existe pas - il doit être@Before
ou peut-être@BeforeClass
3) Le membre de la classe 2 ne devrait probablement pas être statique - surtout si@Before
est utilisé. Il doit être créé pour chaque nouvelle épreuve. 4) il est Préférable de stub de classe 2 dans le test lui-même si pas nécessaire pour tous les tests.OriginalL'auteur John Brumbaugh
Cela a Fonctionné pour Moi:
class1.setClass2(classe 2); pas sûr que cette ligne est censé faire
class1.setClass2(classe 2) est en train de faire de la magie! Il est moqué de l'objet à l'intérieur de class1.
OriginalL'auteur krku