Возможно, это будет случай, когда вам просто нужна другая пара глаз. Я, должно быть, что-то пропустил, но не могу понять, почему этот предмет не может быть проверен. Я в основном пытаюсь обеспечить, чтобы неаутентифицированных пользователи не могут получить доступ к мнению, пометив контроллер с [Authorize] атрибутом, и я пытаюсь к тестам это, используя следующий код:Тестирование модуля ASP.Net MVC Авторизовать атрибут для проверки перенаправления на страницу входа
[Fact]
public void ShouldRedirectToLoginForUnauthenticatedUsers()
{
var mockControllerContext = new Mock<ControllerContext>()
{ DefaultValue = DefaultValue.Mock };
var controller = new MyAdminController()
{ControllerContext = mockControllerContext.Object};
mockControllerContext.Setup(c =>
c.HttpContext.Request.IsAuthenticated).Returns(false);
var result = controller.Index();
Assert.IsAssignableFrom<RedirectResult>(result);
}
RedirectResult Я ищу поскольку это указание на то, что пользователь перенаправляется на форму входа, но вместо этого ViewResult всегда возвращается, и при отладке я вижу, что метод Index() успешно удаляется, даже если пользователь не аутентифицирован.
Я что-то не так? Тестирование на неправильном уровне? Должен ли я лучше тестировать на уровне маршрута для такого рода вещей?
Я знаю, что атрибут [Авторизовать] работает, потому что, когда я разворачиваю страницу, экран входа в систему действительно навязывается мне, но как я могу проверить это в тесте?
Метод контроллера и индекса очень прост, так что я могу проверить его поведение. Я включил их для полноты:
[Authorize]
public class MyAdminController : Controller
{
public ActionResult Index()
{
return View();
}
}
Любая помощь приветствуется ...
Thanks Dylan - Я думал, что могу тестировать на неправильном уровне. Я доволен идеей «предполагать», что если контроллер попадает, пользователь аутентифицируется. P.S. Вы уверены, что он протестирован в рамках? Я могу увидеть несколько тестов, поставляющих действительный IPrincipal, но ни один из них не проверяет неверный случай ;-) – RobertTheGrey
Er, нет ... на самом деле не проверил этот тестовый пример; Я доверяю банде MVC, чтобы все было правильно. Виноват! –
Мне нравится ответ, почему это неправильный подход, но я не уверен в аргументе «функция проверена в рамках и работает». Я верю, что атрибут работает правильно, это работа с каркасом, но я все равно хотел бы утверждать, какие методы моих контроллеров используют этот атрибут. – Mathias