Test d’unité ASP.NET MVC personnalisé AuthorizeAtsortingbute

Je travaille sur un projet ASP.NET MVC 4 (.NET Framework 4) et je me demandais comment tester correctement à l’unité un AuthorizeAtsortingbute personnalisé (j’utilise NUnit et Moq).

J’ai substitué 2 méthodes: AuthorizeCore(HttpContextBase httpContext) et HandleUnauthorizedRequest(AuthorizationContext filterContext) . Comme vous pouvez le constater, ces méthodes attendent respectivement un HttpContextBase et un AuthorizationContext , mais je ne sais pas comment les imiter.

C’est pour autant que j’ai eu:

 [Test] public void HandleUnauthorizedRequest_UnexistingMaster_RedirectsToCommonNoMaster() { // Arrange var httpContext = new Mock(); var winIdentity = new Mock(); winIdentity.Setup(i => i.IsAuthenticated).Returns(() => true); winIdentity.Setup(i => i.Name).Returns(() => "WHEEEE"); httpContext.SetupGet(c => c.User).Returns(() => new ImdPrincipal(winIdentity.Object)); // This is my implementation of IIdentity var requestBase = new Mock(); var headers = new NameValueCollection { {"Special-Header-Name", "false"} }; requestBase.Setup(x => x.Headers).Returns(headers); requestBase.Setup(x => x.HttpMethod).Returns("GET"); requestBase.Setup(x => x.Url).Returns(new Uri("http://localhost/")); requestBase.Setup(x => x.RawUrl).Returns("~/Maintenance/UnExistingMaster"); requestBase.Setup(x => x.AppRelativeCurrentExecutionFilePath).Returns(() => "~/Maintenance/UnExistingMaster"); requestBase.Setup(x => x.IsAuthenticated).Returns(() => true); httpContext.Setup(x => x.Request).Returns(requestBase.Object); var controller = new Mock(); var actionDescriptor = new Mock(); var controllerContext = new ControllerContext(httpContext.Object, new RouteData(), controller.Object); // Act var masterAttr = new ImdMasterAuthorizeAtsortingbute(); var filterContext = new AuthorizationContext(controllerContext, actionDescriptor.Object); masterAttr.OnAuthorization(filterContext); // Assert Assert.AreEqual("", filterContext.HttpContext.Response); } 

Sur la ligne: masterAttr.OnAuthorization(filterContext); une NullReferenceException est levée. Je suppose que cela a quelque chose à voir avec une valeur dans un contexte que nous n’avons pas encore moqué.

Toute aide est grandement appréciée.

Merci d’avance.

Cordialement, Yanik Ceulemans

Sans le code pour l’atsortingbut, on ne peut que deviner. Mais pour commencer à enquêter, vous pouvez créer vos MockBehavior.Ssortingct avec MockBehavior.Ssortingct . De cette façon, Moq lèvera une exception lorsqu’une méthode ou une propriété de la maquette sera appelée sans configuration préalable. L’exception aura le nom de la méthode / propriété:

 var httpContext = new Mock(MockBehavior.Ssortingct);