2010-05-10 13 views
2

Je suis novice au Moq et les tests unitaires. Je dois écrire des tests unitaires à beaucoup de classes qui ont les objets d'autres classes. puis-je me moquer des méthodes des objets de classe. Voici la scenerio- exacteQuand pouvons-nous nous moquer d'un objet et de ses méthodes?

J'ai une classe deux classes A et B et A a un objet privé de B et une méthode de j'appelle en interne la méthode B et ensuite faire des calculs et renvoyer le résultat . Puis-je me moquer de la méthode de B dans ce scenerio? S'il vous plaît essayez de me donner tous les détails sur les conditions dans lesquelles je peux me moquer des méthodes et des fonctions de la classe. Thanx

Répondre

1

Oui, vous pouvez railler les méthodes de B.

La meilleure façon de le faire est probablement de passer par exemple de B dans le constructeur de A lors de sa création.

De cette façon, vos tests unitaires, vous pouvez simplement créer une maquette de B et de le transmettre à la place. En règle générale, vous pouvez simuler facilement n'importe quel objet que vous transmettez ou définissez depuis l'extérieur de l'objet. Donc tout ce qui est passé dans le constructeur ou sur une propriété. Il est sans doute possible de se moquer des variables privées, bien que je ne connais pas assez Moq dire pour sûr, mais cela est souvent mieux fait en restructurant le code pour avoir l'objet dépendant lui a été transmis à la place.

Si B implémente une interface, IB, alors vous feriez quelque chose comme ceci:

var mockB = new Mock<IB>(); 
mockB.Setup(x => x.SomeMethod()).Returns([whatever value you want to return]); 
var a = new A(mockB.Object); 

Note: Ce code est C# et de la mémoire, donc peut-être incorrecte. C'est plus d'une idée générale. Après cela, vous pouvez appeler votre méthode sur un, qui utilisera la valeur que vous avez mise dans la méthode de retour de l'installation pour faire ses calculs.

+0

Hey Glenn. J'ai le scénario exact que vous avez mentionné. Donc, je peux même passer l'objet dépendant-moqueur et même se moquer des fonctions aussi. Merci pour la réponse rapide! – Shailendra