tutorial - web forms c#
¿Cómo probar la unidad de una acción de controlador MVC que depende de la autenticación en c#? (2)
Puede burlarse de su Solicitud. Algo como esto ( Moq usando):
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");
Me gustaría escribir (en c #) una prueba de unidad para una acción de controlador MVC que podría devolver una vista u otra, dependiendo de si la solicitud está autenticada. ¿Cómo puede hacerse esto?
Uso de imitación e 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();