How to use the Moq mocking library

Moq is yet another .NET mocking library, similar to Rhino mocks, NMock, TypeMock etc. It is a nice library but the documentation is lacking. The purpose of this post is to demonstrate a simple way of using moq.

I am trying to test a service called ProductService. ProductService has two external dependencies, IProductRepository and IImageResizer, that are injected in the constructor. I wish to mock the two dependencies. A moq mock object is created like so:

Mock productRepo = new Mock();

The trick is to realise that this object does not implement IProductRepository. To get that you need to use the Mock.Object property. So the correct code to instantiate my service is:

Mock productRepo = new Mock();
Mock imageResizer = new Mock();
ProductService service = new ProductService(productRepo.Object, imageResizer.Object);

The other features of moq, like setting and verifying expectations, are obvious from the documentation.