I recently worked on a project in which 90% of its tests were integration tests because the core purpose of the project was to interact with external entities. In an effort create more unit tests, I employed Moq (and lots of refactoring). This is an example of basic Moq usage.
Let’s say we have a repository that gets documents from a database. The assumption is that a repository interface, IDocumentRepository, is being implemented.
In my case, I found it easier to deserialize results from file, rather than building the results by hand for each mocked response. I used System.Xml.Serialization to serialize real responses to file.
Let’s Moq it…
var mockRepository = new Mock<IDocumentRepository>(); // if the query is for text/plain documents only, mock a response for that mockRepository.Setup(p => p.FindDocuments( It.Is<DocumentQueryParams>(q => q.MimeType == "text/plain"))) .Returns(DeSerializeResults<List<Document>>("TextDocuments.xml")); // use It.IsAny to return the same result regardless of the parameters mockRepository.Setup(p => p.FindDocuments( It.IsAny<DocumentQueryParams>())) .Returns(DeSerializeResults<List<Document>>("AllDocuments.xml"));