2012-01-13 4 views
3

фона:Как установить HttpContext.Current.User.Identity.Name для модульного тестирования

Я тестирую функцию внутри ASP.NET 4.0 (Web Forms не MVC), и я использую Модульное тестирование встроенный в Visual Studio 2010. Я создал отдельный тестовый проект и создаю тестовый класс для каждого класса в веб-проекте.

Вопрос:

Я столкнулся с проблемой, с одной из функций, которые используют HttpContext.Current.User.Identity.Name как часть логики. Как установить это значение в классе или методе проекта тестирования модуля, чтобы я мог проверить эту функцию?

Update:

То, что я надеялся на то, что там был дополнительный атрибут я мог установить выше моего метода испытаний. В настоящее время у меня есть:

[TestMethod()] 
[HostType("ASP.NET")] 
[AspNetDevelopmentServerHost("C:\\DEV\\ProjectName\\ClientWeb", "/")] 
[UrlToTest("http://localhost:9018/")] 
public void GetLoginTest() 
{ 
    // test code 
} 
+0

Возможный дубликат [Тестирование веб-служб узла - HttpContext] (http://stackoverflow.com/questions/4028056/unit-testing-web-services-httpcontext) – BNL

+0

RE: Атрибуты, HttpContext.Current несовместимы с модульное тестирование. Вам нужно и абстракция какого-то типа. – BNL

ответ

3

Вы задаете неправильный вопрос. HttpContext.Current.User.Identity - это зависимость, которую вы должны инкапсулировать, прежде чем вы сможете тестировать свой код. Если он инкапсулирован (возможно, за интерфейсом), вы можете заменить абстракцию на тестовые данные/объект.

+0

Не могли бы вы указать мне хороший пример этого подхода? – Josh

+1

Труднее найти ссылку на эту тему, как я думал. Если вы google для Dependency Injection + HttpContext, вы получаете много вещей, но большая часть из них связана с специальными контейнерами для инъекций зависимостей. Вот ссылка на инъекцию зависимости бедных людей, которая дает вам общую идею: http://stackoverflow.com/questions/5251636/asp-net-mvc-and-ioc-chaining-injection –

1

Вы можете создать свой собственный Principal путем внедрения IPrincipal, в том, что вы должны определить пользовательские Identity с помощью интерфейса IIdentity, внутри которого вы хотите вернуть свою ценность для Name собственности.

Затем вы можете установить HttpContext.Current.User в свой собственный основной объект.

Смежные вопросы