2008-11-17 2 views
5

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

Должен ли я создать интерфейс, который обеспечивает способ доступа к текущему имени пользователя вошедшего в систему?

ответ

4

Последняя строка вашего вопроса, вероятно, самое быстрое решение, однако, я не думаю, что вам нужно создать интерфейс, HttpContext.Current.User это уже IPrincipal и HttpContext.Current.User.Identity это уже IIdentity.

Если проверка логики использует либо из этих интерфейсов, контроллер может быть издевались пройти IIdentity, что вы создаете вместо HttpContext.Current.User.Identity

Надежда, что помогает!

2

Я использую Thread.CurrentPrincipal.Identity.Name. Тривиально создавать GenericPrincipal для модульного теста и прикрепить его.

5

Вы можете использовать этот код

Controller CreateControllerAs(string userName) { 

    var mock = new Mock<ControllerContext>(); 
    mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName); 
    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true); 

    var controller = new SomeController(); 
    controller.ControllerContext = mock.Object; 

    return controller; 
} 

Он использует moq Lib

+0

Вы знаете, где я могу найти Пробный класс? Я смотрел по всему MSDN, пытаясь найти документацию об этом, но не добился какого-либо прогресса. –

+1

https://code.google.com/p/moq/ эта библиотека используется здесь – Sly

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