Pregunta

Supongamos que tiene una página de perfil a la que solo puede acceder el propietario de ese perfil. Esta página de perfil se encuentra en:

Usuario / Perfil / {ID de usuario}

Ahora, imagino que para evitar que otros usuarios puedan acceder a esta página, puede estructurar la función de Perfil de su clase UserController para verificar la identidad de la sesión actual:

HttpContext.Current.User.Identity.Name

Si la identificación coincide con la de la url, entonces continúa. De lo contrario, redirigir a algún tipo de página de error.

Mi pregunta es ¿cómo haces la prueba de unidad en algo como esto? Supongo que necesita usar algún tipo de inyección de dependencia en lugar del HttpContext en el controlador para realizar la verificación, pero no estoy claro cuál es la mejor manera de hacerlo. Cualquier consejo sería útil.

¿Fue útil?

Solución 2

Terminé yendo con el " UserNameFilter " mostrado en entrada de blog . Funciona como un amuleto y es fácil de probar.

Otros consejos

El enlace de arriba es bueno. También agregaría que, en lugar de verificar mediante programación el valor de User.Identity.Name, debería usar los atributos de Autorización como se describe en el artículo:

http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx

Probablemente pueda hacerlo usando un falso para el contexto del controlador. Echa un vistazo a este artículo: http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

Aquí es donde entra la burla, con un HttpContext falso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top