Как я могу издеваться над значением ASP.NET ServerVariables ["HTTP_HOST"]? - PullRequest
5 голосов
/ 23 февраля 2010

У меня есть следующий код, который не работает во время выполнения ...

var mock = new Mock<ControllerContext>();
mock.SetupGet(x => x.HttpContext.Request
    .ServerVariables["HTTP_HOST"]).Returns(domain);

** RunTime Error: неверная настройка на не перезаписываемую свойство

У меня в контроллере есть код, который должен проверить домен, на который пользователь запросил / ушел.

Я не уверен, как это смоделировать? есть идеи?

PS. Я использую Moq framewoke в приведенном выше примере ... поэтому я не уверен, что это проблема, и т. Д.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2010

Нельзя издеваться над индексатором в коллекции NameValueCollection, потому что он не виртуальный. То, что я хотел бы сделать, это смоделировать свойство ServerVariables, так как оно виртуально. Вы можете заполнить свою собственную коллекцию NameValueCollection. Смотри ниже

Вот что я бы сделал:

 var context = new Mock<ControllerContext>();
 NameValueCollection variables = new NameValueCollection();
 variables.Add("HTTP_HOST", "www.google.com"); 
 context.Setup(c => c.HttpContext.Request.ServerVariables).Returns(variables);
 //This next line is just an example of executing the method 
 var domain = context.Object.HttpContext.Request.ServerVariables["HTTP_HOST"];
 Assert.AreEqual("www.google.com", domain);
1 голос
/ 23 февраля 2010

Вы можете покрыть HttpContext интерфейсом и смоделировать его в своих тестах:

interface IHttpContextValues
{
    string HttpHost { get; }
}

class HttpContextValues : IHttpContextValues
{
    public string HttpHost
    {
        get { return HttpContext.Current.Request.ServerVariables["HTTP_HOST"]; }
    }
}

class BaseController : Controller
{
    public IHttpContextValues HttpContextValues;
    BaseController()
    {
        HttpContextValues = new HttpContextValues();
    }
}

Затем вы используете HttpContextValues ​​вместо ControllerContext.HttpContext в коде вашего контроллера. Вам не нужно создавать какие-либо комбинации насмешек.

...