2009-07-09 17 views

Respuesta

31

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"); 
+0

ordenado. gracias por tu respuesta. ;) – Mats

+0

Esto no funciona para mí - devuelve el mismo nombre de vista independientemente de verdadero/falso – Kev

14

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(); 
+1

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

+1

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

Cuestiones relacionadas