Me gustaría escribir (en C#) una prueba de unidad para una acción de controlador MVC que puede devolver una vista u otra, dependiendo de si la solicitud está autenticada. ¿Cómo puede hacerse esto?¿Cómo probar la unidad de una acción de controlador MVC que depende de la autenticación en C#?
Respuesta
Puede burlar su solicitud. Algo como esto (usando Moq):
var request = new Mock<HttpRequestBase>();
request.SetupGet(x => x.IsAuthenticated).Returns(true); // or false
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new YourController();
controller.ControllerContext =
new ControllerContext(context.Object, new RouteData(), controller);
// test
ViewResult viewResult = (ViewResult)controller.SomeAction();
Assert.True(viewResult.ViewName == "ViewForAuthenticatedRequest");
El uso de burlas y de inyección de dependencia. Lo siguiente asume que está comprobando que está autenticado y luego accediendo al objeto del usuario para obtener la identificación del usuario. Utiliza RhinoMocks.
// mock context variables
var username = "user";
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var request = MockRepository.GenerateMock<HttpRequestBase>();
var identity = MockRepository.GenerateMock<IIdentity>();
var principal = MockRepository.GenerateMock<IPrincipal>();
httpContext.Expect(c => c.Request).Return(request).Repeat.AtLeastOnce();
request.Expect(r => r.IsAuthenticated).Return(true).Repeat.AtLeastOnce();
httpContext.Expect(c => c.User).Return(principal).Repeat.AtLeastOnce();
principal.Expect(p => p.Identity).Return(identity).Repeat.AtLeastOnce();
identity.Expect(i => i.Name).Return(username).Repeat.AtLeastOnce();
var controller = new MyController();
// inject context
controller.ControllerContext = new ControllerContext(httpContext,
new RouteData(),
controller);
var result = controller.MyAction() as ViewResult;
Assert.IsNotNull(result);
// verify that expectations were met
identity.VerifyAllExpectations();
principal.VerifyAllExpectations();
request.VerifyAllExpectations();
httpContext.VerifyAllExpectations();
gracias por su respuesta, que estoy seguro está trabajando de manera excelente. dado que he probado la respuesta de eu-ge-ne (que funciona bien para mí) y él fue un poco más rápido con la respuesta, marqué su respuesta. sin ofender. tenga un buen día. ;) – Mats
No hay problema. Es realmente la misma respuesta. Solo dejé la mía porque muestra cómo burlarse del principal/identidad en caso de que necesite obtener el nombre de usuario, o el método IsInRole en el principal, que no he mostrado. – tvanfosson
- 1. ¿Cómo puedo probar la unidad de mi controlador ASP.NET MVC que usa FormsAuthentication?
- 2. ¿Cómo pruebo la unidad de una acción de controlador que utiliza su controlador. Variable de usuario?
- 3. ¿Cómo debería una unidad probar un controlador .NET MVC?
- 4. Cómo probar la lógica que depende de la fecha actual
- 5. ¿Cómo puedo probar la unidad de un controlador Symfony2?
- 6. ¿Cómo se usa la inyección de resorte para probar la unidad de un controlador?
- 7. ¿Cómo puedo probar la unidad de un MVC UserViewControl?
- 8. ¿Cómo probar la unidad?
- 9. C# MVC: ¿Cómo anular la redirección de autenticación configurada?
- 10. ¿Cómo probar filtros de acción en ASP.NET MVC?
- 11. ¿Cómo probar la unidad Singleton class - C++?
- 12. ¿Cómo probar la unidad de su API?
- 13. backgroundworker bloqueando la acción del controlador MVC
- 14. ¿Ejecuta la acción del controlador MVC sin la vista?
- 15. Cómo probar la unidad de análisis JSON
- 16. Cómo probar las subclases de la unidad
- 17. ¿Cómo probar la unidad NSCoding?
- 18. ¿Cómo puedo probar un evento de un controlador MVC?
- 19. ¿Cómo puedo probar la unidad de algo que utiliza VisualTreeHelper?
- 20. Cómo probar atributos de la unidad con MsTest usando C#?
- 21. Zend Framework 2 ¿cómo probar la redirección en la acción del controlador?
- 22. ¿Cómo burlarse de Request.Files [] en la clase de prueba de la unidad MVC?
- 23. ASP.NET MVC controlador Constructor Llamado antes de la autenticación
- 24. Cómo probar la lógica de la unidad en jsp?
- 25. ASP.NET MVC enviando datos JSON a una acción de controlador
- 26. Redireccionando al controlador especificado y a la acción en asp.net filtro de acción mvc
- 27. clase inyectar en atributo de autenticación por medio de la Unidad 2 y 3 MVC
- 28. ¿Cómo escribo las pruebas de unidad para una clase que depende de un SerialPort?
- 29. ¿Cómo puedo probar la unidad el comportamiento del atributo HandleError para un método de controlador?
- 30. Cómo probar la unidad de una clase que necesita un archivo específico para estar presente
ordenado. gracias por tu respuesta. ;) – Mats
Esto no funciona para mí - devuelve el mismo nombre de vista independientemente de verdadero/falso – Kev