tags:

views:

36

answers:

1

I am novice to the Moq and unit testing. I have to write unit tests to a lot of classes which has the objects of other classes. can i mock the methods of the class objects. Here is the exact scenerio-

I have a class two classes A and B and A has a private object of B and in a method of A i am internally calling the method of B and then doing some calculation and returning the result. Can i mock the method of B in this scenerio? Please try to give me full detail about the conditions where i can mock the methods and functions of the class. Thanx

+1  A: 

Yes you can mock the methods of B.

The easiest way to do it is probably to pass in instance of B into the constructor of A when you create it.

That way in your unit tests you can just create a mock of B and pass it in instead. Generally you can Mock any object that you are passing in or setting from outside the object pretty easily. So anything passed into the constructor or set on a property. It is probably possible to mock private variables, though I don't know enough about Moq to say for sure, but this is often better done by restructuring the code to have the dependant object passed to it instead.

If B implements an interface, IB, then you would do something like this:

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

Note: This code is C# and from memory, so could be incorrect. It is more of a general idea.

After that you can call your method on a, which will use whatever value you put into the Returns method on the setup to do its calculations.

Glenn Condron
Hey Glenn. i have the exact scenario which you mentioned. So i can even pass the mocked-dependent object and even mock the functions too. Thanks for the quick reply!
Shailendra