Начнем с основ. Википедия нам с радостью скажет, что mock-объект это объект-имитация или объект-пародия. Данные объекты нужны для упрощения написания модульных тестов зависимых от смежных проектов. Например у нас есть большой проект, в рамках которого работает несколько команд над своими проектами. Архитекторы с аналитиками проработали и согласовали интерфейсы. Но сложность и скорость разработки у каждой команды своя. А у нас есть зависимый от другой команды код, в котором планируется получать значение из сервиса разрабатываемого другой командой. В том числе и при написании тестов. В данном случае нам на помощь и приходят различные mock фреймворки.
Небольшое отступление. В Visual studio 2012 в тестовом фреймворке есть namespace System.Fakes. Который предоставляет встроенные заглушки.
Мой выбор пал на Moq. Т.к. его хвалили на stackoverflow :).
И так предположим у нас есть интерфейс
public class Contracts
{
public interface IUrlManager
{
UrlList GetByUserGuid(Guid id);
}
public enum UrlList
{
First = 1,
Second = 2,
}
}
В коде теста нам необходимо используя скаченный фреймворк "заглушить" или как еще говорят застабить, сервис, который его должен реализовывать.
Все стандартно в Reference тестового проекта подключаем Moq.dll
Далее в коде теста создаем мок по нужному нам интерфейсу.
var moc = new Mock();
// затем используя лямбда выражение пишем простую реализацию метода
moc.Setup(urlmanager => urlmanager.GetByUserGuid(new Guid("cb1e6c68-8750-4234-aaf1-abcaa3583eff"))).Returns(Contracts.UrlList.First)
// вызываем метод
var mocresult = moc.Object.GetByUserGuid(new Guid("cb1e6c68-8750-4234-aaf1-abcaa3583eff"));
Подробнее про различные кейсы использования фреймворка описано на одной из страниц ресурса