Начнем с основ. Википедия нам с радостью скажет, что 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"));
 
Подробнее про различные кейсы использования фреймворка описано на одной из страниц ресурса