HttpRequest
имеет массу невиртуальных свойств и методов. Вы никогда не сможете макет это. Если вы обращаетесь к нему из Page.Request, вы даже не можете создать новый экземпляр и установить его значения для своего теста. Это одна из причин того, что пользовательский интерфейс редко (если вообще когда-либо) получает автоматические тесты; это часто просто невозможно. Вот почему мы используем шаблоны, которые позволяют автоматическое тестирование, такое как MVC и MVVM: путем точной обработки логики обработки до отдельного класса, который имеет значение, мы уменьшаем объем ручного тестирования, который нам нужно сделать.
Лучше всего у вас есть доступны для вас, чтобы создать класс, который вы можете макет (т.е. с виртуальными методами или спортивных и отливать в качестве интерфейса) и получить доступ только к HttpRequest
через этого класса.
Например, если вы желая получить определенные ценности печенья как часть вашей обработки страницы, вы можете создать CookieHandler
класс следующим образом:
public class CookieHandler
{
private HttpRequest CurrentRequest;
public CookieHandler(HttpRequest request)
{
CurrentRequest = request;
}
public virtual HttpCookie UserLanguagePreference
{
get
{
return CurrentRequest.Cookies["UserLanguagePreference"].Name;
}
}
}
Это не идеальный класс, это просто для пример; потому что UserLanguagePreference
является виртуальным, его можно издеваться над Rhino. Вы можете сделать CookeHandler
одноэлементным (заменяемым в ваших тестах), вы можете использовать инъекцию на основе свойств на странице пользовательского интерфейса, или вы можете использовать инфраструктуру DI, такую как Unity.
Дело в том, что вы не можете проверить все с автоматическими модульными тестами, поэтому не беспокойтесь. Испытайте столько, сколько сможете, и сохраните остальные для интеграции и приёма вручную.
привет спасибо за вашу помощь, Ive отредактировал вопрос, можете ли вы сообщить мне, если это возможно? – Matthew