Вероятно, это будет случай, когда нужно просто еще одна пара глаз. Я, должно быть, что-то пропустил, но не могу понять, почему этот предмет не может быть проверен. Я в основном стараюсь, чтобы неавторизованные пользователи не могли получить доступ к представлению, отметив контроллер атрибутом [Authorize], и я пытаюсь проверить это, используя следующий код:
[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] работает, потому что, когда я разворачиваю страницу, экран входа в систему действительно навязывается мне, но как я могу проверить это в тесте?
Метод контроллера и индекса очень прост, так что я могу проверить поведение. Я включил их для полноты:
[Authorize]
public class MyAdminController : Controller
{
public ActionResult Index()
{
return View();
}
}
Любая помощь ценится...