Esto probablemente sea un caso de solo necesitar otro par de ojos. Debo extrañar algo, pero no puedo entender por qué este tipo de cosas no pueden ser probadas. básicamente estoy tratando de asegurarse de que los usuarios no autenticados no pueden acceder a la vista marcando el controlador con el atributo [Autorizar] y yo estoy tratando de pruebas esta usando el siguiente código:Pruebas unitarias ASP.Net MVC Autorizar el atributo para verificar el redireccionamiento a la página de inicio de sesión
[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);
}
El RedirectResult Busco es algún tipo de indicación de que el usuario está siendo redirigido al formulario de inicio de sesión, pero en su lugar siempre se devuelve un ViewResult y cuando se depura puedo ver que el método Index() se ejecuta correctamente aunque el usuario no esté autenticado.
¿Estoy haciendo algo mal? Probando en el nivel equivocado? ¿Debería estar probando en el nivel de ruta para este tipo de cosas?
Sé que el atributo [Autorizar] está funcionando, porque cuando hago girar la página, la pantalla de inicio de sesión se me impone, pero ¿cómo puedo verificar esto en una prueba?
El controlador y el método de índice son muy simples solo para que pueda verificar el comportamiento. Yo los he incluido para la integridad:
[Authorize]
public class MyAdminController : Controller
{
public ActionResult Index()
{
return View();
}
}
Cualquier ayuda apreciada ...
Gracias Dylan - pensé que podría estar poniendo a prueba en el nivel equivocado. Estoy contento con la idea de "suponer" que si el controlador recibe un golpe, el usuario se autentica. P.S. ¿Estás seguro de que está probado en el marco? Puedo ver algunas pruebas que proporcionan IPrincipal válido, pero ninguna que pruebe el caso no válido ;-) – RobertTheGrey
Er, no ... no he verificado realmente el caso de prueba; Estoy confiando en que la pandilla de MVC lo hizo bien. ¡Mi error! –
Me gusta la respuesta de por qué no es el enfoque correcto, pero no estoy convencido del argumento "la característica se prueba en el marco y funciona". Confío en que el atributo funciona correctamente, ese es el trabajo del framework, pero aún quisiera afirmar qué métodos de mis controladores usan el atributo. – Mathias