Я в настоящее время тестирую свое приложение и застреваю при попытке выяснить, как создать пользовательский поддельный ссылающийся домен URL. Я попытался трудно кодировать его, но получаю ошибку, что это только для чтения. Вот то, что я попробовал до сих пор:
fakeController.HttpContext.Request.UrlReferrer.AbsolutePath = "http://www.yahoo.com";
а также,
fakeController.Request.UrlReferrer = "http://www.yahoo.com";
Я искал сеть некоторые идеи о том, как создать поддельный/ложный ссылающийся домен URL для моего поддельного контроллера, но не имел никакой удачи. Любые предложения приветствуются.
Примечание: Я использую Visual Studio встроенные средства поблочного тестирования.
ОБНОВЛЕНИЕ:
Спасибо всем за Ваши предложения до сих пор, я был бы более, чем готов использовать любую другую систему поблочного тестирования за пределами Visual Studio, к сожалению, здесь на моей работе, нам только разрешают использовать встроенную систему Visual Studio, таким образом, я должен работать с тем, что я имею. Спасибо, хотя, хорошо знать, что эти опции там.
Я рекомендую перейти на Mock Framework, например NMock или Rhino Mock, который позволяет создавать их и возвращает конкретное значение для данного вызова, например get в этом свойстве.
Создайте имитацию запроса для HttpContext, затем установите ожидание на запрос, который возвращает Uri. Пример с использованием RhinoMocks.
var context = MockRepository.GenerateMock<HttpContextBase>();
var request = MockRepository.GenerateMock<HttpRequestBase>();
request.Expect( r => r.UrlReferrer ).Returns( new Uri( "http://www.yahoo.com" ) ).Repeat.AtLeastOnce();
context.Expect( c => c.Request ).Returns( request ).Repeat.Any();
fakeController.HttpContext = context;
Для этого, к сожалению, вам понадобится создать целый фиктивный HttpContext. Вместо того, чтобы жестко кодировать это, я настоятельно рекомендую использовать макеты, так как это позволит вам избежать настройки частей объекта, которые вам на самом деле не нужны.
Я бы посоветовал ознакомиться с сообщением Скотта Хансельмана MvcMockHelpers , чтобы получить некоторое представление о том, что здесь задействовано (он включает код как для Rhino, так и для Moq).