Дразнящий HttpRequest в ASP.NET 4.0 - PullRequest
4 голосов
/ 16 июля 2010

Я видел много похожих тем, но ни один из них не касался моей конкретной ситуации.

Я пишу модульные тесты в веб-приложении ASP.NET 4.0 (формы ASP.NET, а не MVC). В коде есть несколько мест, где я вызываю коллекцию ServerVariables для вызова переменных типа REMOTE_ADDR. Поскольку мои модульные тесты на самом деле не запускают HttpRequests при выполнении моего кода, такие вещи, как ServerVariables, являются Null и, следовательно, ошибка, когда я пытаюсь вызвать HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")

Все решения, которые я нашел для решения этой проблемы, относятся к MVC, и поэтому они предполагают, что HttpRequest происходит от HttpRequestBase, что и в MVC, но не в ASP.NET Forms.

Я пытался использовать Moq, но вы не можете смоделировать запечатанный класс, а HttpRequest, к сожалению, запечатан без интерфейса.

1 Ответ

13 голосов
/ 16 июля 2010

Классы HttpRequestBase и HttpRequestWrapper могут использоваться с небольшим трудом.

Куда бы вы в данный момент не обращались HttpContext.Current.Request - или просто Page.Request - вам нужно будет вместо этого использовать инъецируемый экземпляр HttpRequestBase. Затем вам нужно будет ввести другой подкласс HttpRequestBase в зависимости от того, тестируете вы или живы.

  • Для живого кода вы, вероятно, внедрили бы экземпляр HttpRequestWrapper, включающий HttpContext.Current.Request:

    var liveRequest = new HttpRequestWrapper(HttpContext.Current.Request);
    
  • Для тестового кода вам нужно создать и внедрить свой собственный подкласс mock HttpRequestBase. Предположительно Moq может сделать это для вас на лету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...