Estoy escribiendo una prueba de unidad 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!¿Cómo burlarse de httpcontext para que no sea nulo desde una prueba de unidad?
Respuesta
Tiene estas dos funciones de here 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);
asegurarse de que tiene Moq instalado en su proyecto de pruebas:
Install-Package Moq
Sé que esto es un tema viejo, sin embargo Burlándose de una aplicación MVC para las pruebas unitarias es algo que hacemos de forma muy regular.
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 unitarias funcionaba en modo de depuración y HttpContext mostraba "no se pudo evaluar la expresión" al intentar echar un vistazo a 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.
- 1. Burlarse de HttpContext no funciona
- 2. Controlador de prueba de unidad ASP.NET MVC con HttpContext
- 3. Usando httpcontext en la prueba de unidad
- 4. unidad que prueba una unidad de trabajo
- 5. Pruebas de la unidad MvcMailer: System.ArgumentNullException httpContext no puede ser nulo
- 6. ¿Para burlarse o no para burlarse?
- 7. byte [] en LINQ to SQL y en una prueba de unidad que utiliza burlarse
- 8. Prueba de unidad C#, cómo realizar una prueba mayor que
- 9. Razones para que un IBOutlet sea nulo
- 10. Unidad Prueba una carga de archivo, ¿cómo?
- 11. Moq: unidad de evaluación de un método depender de HttpContext
- 12. Mocking HTTPResponse en una prueba de unidad
- 13. ¿Cómo burlarse de Request.Files [] en la clase de prueba de la unidad MVC?
- 14. Unidad de prueba de una clase que utiliza un temporizador
- 15. ¿Prueba de unidad para seguridad de hilo?
- 16. Cómo reiniciar Thread.CurrentPrincipal a una prueba no autenticada en una Unidad de Prueba
- 17. Prueba de unidad CacheManager
- 18. Burlarse de una clase vs. burlarse de su interfaz
- 19. Proyecto de prueba de unidad que no se genera desde el servidor de compilación
- 20. ¿Cómo puedo escribir una prueba de unidad para una clase de controlador que usa formas de win para vistas?
- 21. Prueba para nulo y no nulo en Mathematica
- 22. ¿Qué haría que offsetParent sea nulo?
- 23. ¿Cómo burlarse de EntityManager?
- 24. Sockets de prueba de unidad
- 25. Tiene una unidad/prueba de integración sin afirmar que exista?
- 26. Unidad de prueba EJB
- 27. Ejemplos de prueba de unidad?
- 28. Prueba de unidad con una biblioteca estática
- 29. Mock UdpClient para prueba de unidad
- 30. Cómo burlarse de un aspecto
Creo que esta publicación te ayudará. http://stackoverflow.com/questions/542132/mocking-a-httpcontext-response-output-with-moq –
¡Lo tengo! Esta publicación ayudó mucho: http://www.emadibrahim.com/2008/04/04/unit-test-linq-to-sql-in-aspnet-mvc-with-moq/ Hizo una clase HttpContextFactory con dos métodos Un HTTPcontext de burla y el otro configurando el contexto del controlador actual para los datos falsos. – TheFlyingCircus
Debe poner un código de muestra que describa su solución aquí como respuesta a su pregunta. Asegúrate de aceptarlo cuando puedas. –