Доступ к Mocked Request.ServerVariables в классах - PullRequest
2 голосов
/ 05 декабря 2011

Я смоделировал переменные сервера, которые используются в контроллере.

request.SetupGet(x => x.ServerVariables)
    .Returns(new System.Collections.Specialized.NameValueCollection
    {
        {"SERVER_NAME","localhost"}, 
        {"SCRIPT_NAME","localhost"}, 
        {"SERVER_PORT","80"}, 
        {"HTTPS","www.melaos.com"}, 
        {"REMOTE_ADDR","127.0.0.1"}, 
        {"REMOTE_HOST","127.0.0.1"} 
    });

Я могу получить значения переменных сервера в контроллере, но не в классах модели. Почему это так?

Единственное отличие в получении значения в Controller и Model заключается в том, что в Controller мы пишем HttpContext.Request.ServerVariables, а в Model - HttpContext.Current.Request.ServerVariables.

Они разные? Как я могу получить эти значения в Model.

1 Ответ

3 голосов
/ 05 декабря 2011

в то время как в Model мы пишем HttpContext.Current.Request.ServerVariables.

HttpContext.Current - это проблема.Это статическое свойство, которое нельзя смоделировать и которое нельзя использовать вне контекста ASP.NET, такого как модульный тест.Поэтому, если вы используете HttpContext.Current, вы не можете выполнить модульное тестирование своего приложения.При этом вам не следует использовать какие-либо специфичные для HTTP артефакты в вашей модели.Вы должны напрямую передать значения из вашего контроллера в модель, чтобы модель не пыталась получить их.

...