Установите значение ServerVariable при имитации HttpRequest с помощью Moq?

Я издеваюсь над объектом HttpRequest, используя Moq для модульного тестирования в ASP.NET MVC. Мне нужно установить одну из ServerVariables (LOGON_USER) в запросе. Это возможно? Я пытался использовать следующий метод, но получаю исключение, поскольку коллекция ServerVariables не может быть переопределена.

    request.SetupGet(req => req.ServerVariables["LOGON_USER"]).Returns(@"TestUserName");

Можно ли установить значение ServerVariable для тестирования?

Нужно ли мне передавать новую коллекцию NameValueCollection, а не пытаться установить один конкретный ключ?


person Mark Struzinski    schedule 20.07.2009    source источник
comment
См. мой ответ здесь: stackoverflow.com/a/34194622/573045   -  person Birey    schedule 29.04.2016


Ответы (3)


Это один из способов сделать это. Обычно я издеваюсь над этими вещами, изменяя правила: я не хочу знать о HttpRequest или его родственниках в своих тестах. Вместо этого я спрашиваю: где я могу получить имя вошедшего в систему пользователя, если бы мне пришлось решать?

И это будет ICallerContext или любое другое имя, которое мы сможем придумать. Тогда я издеваюсь над этим интерфейсом.

Моему контроллеру нужна ссылка на новую зависимость:

public class MyController
{
  public MyController(ICallerContext caller) {...}
}

Мой тест должен передать издевательский экземпляр контроллеру:

var caller = new Mock<ICallerContext>();
var controller = new MyController(caller.Object);

caller.Setup(c => c.LogonUserName).Returns("TestUserName");

controller.DoTheMagic();

//Assertion(s) goes here...
person Thomas Eyde    schedule 15.09.2009


Хорошо, разобрался с этим. Я создал этот метод для создания NameValueCollection для ServerVariables:

private static NameValueCollection CreateServerVariables(string logonUserName)
{
    var collection = new NameValueCollection {{"LOGON_USER", logonUserName}};
    return collection;
}

Затем я назвал это так в своей конфигурации:

    var request = new Mock<HttpRequestBase>();

    request.SetupGet(req => req.ServerVariables).Returns(CreateServerVariables(userName));
person Mark Struzinski    schedule 20.07.2009