asp.net-mvc-3 unit-testing mocking moq httpcontext

asp.net mvc 3 - ¿Cómo burlarse de httpcontext para que no sea nulo desde una prueba unitaria?



asp.net-mvc-3 unit-testing (2)

Estoy escribiendo una prueba unitaria y el método del controlador arroja una excepción porque HttpContext / ControllerContext es nulo. No necesito afirmar nada desde HttpContext, solo necesito que no sea NULL. He investigado y creo que Moq es la respuesta. Pero todas las muestras que he visto no me han ayudado mucho. No necesito hacer nada elegante, solo para burlarme del httpcontext. ¡Apúntame en la dirección correcta!


Conseguí estas dos funciones desde aquí en una clase;

public static class HttpContextFactory { public static void SetFakeAuthenticatedControllerContext(this Controller controller) { var httpContext = FakeAuthenticatedHttpContext(); ControllerContext context = new ControllerContext( new RequestContext(httpContext, new RouteData()), controller); controller.ControllerContext = context; } private static HttpContextBase FakeAuthenticatedHttpContext() { var context = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); var response = new Mock<HttpResponseBase>(); var session = new Mock<HttpSessionStateBase>(); var server = new Mock<HttpServerUtilityBase>(); var user = new Mock<IPrincipal>(); var identity = new Mock<IIdentity>(); context.Setup(ctx => ctx.Request).Returns(request.Object); context.Setup(ctx => ctx.Response).Returns(response.Object); context.Setup(ctx => ctx.Session).Returns(session.Object); context.Setup(ctx => ctx.Server).Returns(server.Object); context.Setup(ctx => ctx.User).Returns(user.Object); user.Setup(ctx => ctx.Identity).Returns(identity.Object); identity.Setup(id => id.IsAuthenticated).Returns(true); identity.Setup(id => id.Name).Returns("a.ali174"); return context.Object; } }

De la prueba unitaria, los llamé como tales;

HttpContextFactory.SetFakeAuthenticatedControllerContext(controller);

Asegúrese de tener instalado Moq en su proyecto de prueba:

Install-Package Moq


Sé que este es un tema más antiguo, sin embargo, Mocking a MVC para pruebas unitarias es algo que hacemos con mucha frecuencia.

Solo quería agregar mis experiencias Mocking a MVC 3 usando Moq 4 después de actualizar a Visual Studio 2013. Ninguna de las pruebas de unidad funcionaba en modo de depuración y HttpContext mostraba "could not evaluate expression" cuando intentaba ver las variables .

Resulta que Visual Studio 2013 tiene problemas para evaluar algunos objetos. Para que la depuración de aplicaciones web falsas volviera a funcionar, tuve que verificar el "Uso del modo de compatibilidad administrada" en Herramientas => Opciones => Depuración => Configuración general.