¿Cómo me burlo de una solicitud de página para una página .net MVC?Pruebas unitarias en asp.net MVC, ¿cómo me burlo de una solicitud de página?
8
A
Respuesta
15
Uso RhinoMocks:
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var httpRequest = MockRepository.GenerateMock<HttpRequestBase>();
httpContext.Expect(c => c.Request).Return(httpRequest).Repeat.Any();
... set up expectations on request...
var controller = new MyController();
controller.ControllerContext = new ControllerContext(httpContext,
new RouteData(),
controller);
...invoke action, check assertions...
httpContext.VerifyAllExpectations();
httpRequest.VerifyAllExpectations();
11
Uso Moq:
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.Setup(x => x.ApplicationPath).Returns("/");
request.Setup(x => x.Url).Returns(new Uri("http://localhost/home"));
request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
11
manualmente (porque odio Burlándose de los marcos que requieren 8 líneas de configuración por prueba)
// in some common location, only once
public class MockHttpContext : HttpContextBase
{
public MockHttpRequest m_request = new MockHttpRequest();
public MockHttpResponse m_response = new MockHttpResponse();
public override HttpRequestBase Request
{ get { return m_request; } }
public override HttpResponseBase Response
{ get { return m_response; } }
}
public class MockHttpRequest : HttpRequestBase
{
// override whatever bits you want (eg cookies)
}
public class MockHttpResponse : HttpResponseBase
{
// override whatever bits you want (eg cookies)
}
// in your specific test
controller = new YourController {
ControllerContext = new ControllerContext { HttpContext = new MockHttpContext() }
};
Cuestiones relacionadas
- 1. ¿Cómo me burlo del HttpContext en ASP.NET MVC usando Moq?
- 2. ASP.NET MVC, RavenDb y Pruebas unitarias
- 3. Pruebas unitarias ASP.NET MVC con datos
- 4. Pruebas unitarias Controladores MVC
- 5. ASP.NET MVC: Controladores de pruebas unitarias que usan UrlHelper
- 6. Pruebas unitarias Código ASP.NET detrás de
- 7. Pruebas unitarias ASP.NET MVC 4 aplicaciones a fondo
- 8. ¿Cómo me burlo de un campo privado?
- 9. ¿Cómo me burlo de un plugin jQuery?
- 10. ¿Cómo me burlo de una propiedad de clase con mox?
- 11. ¿Cómo me burlo de objetos sin herencia (en C)?
- 12. ¿Cómo me burlo de la jerarquía de módulos no existentes?
- 13. Pruebas unitarias API REST
- 14. ¿Cómo me burlo de los objetos que no puedo instanciar en mis pruebas?
- 15. ¿Cómo se realizan las pruebas unitarias de IgnoreRoute en ASP.NET MVC
- 16. ¿Cómo me burlo de la clase java.lang.reflect.Method en PowerMockito?
- 17. Detectar una solicitud cancelada en ASP.NET MVC
- 18. Creando una referencia URL simulada en ASP.Net MVC para Pruebas unitarias
- 19. Pruebas unitarias ASP.Net MVC Autorizar el atributo para verificar el redireccionamiento a la página de inicio de sesión
- 20. Pruebas unitarias: cómo hacerlo?
- 21. Pruebas unitarias y nhibernate?
- 22. ¿Cómo cierras una página ASP.NET MVC desde el controlador?
- 23. Agilización de la compilación y pruebas unitarias en Visual Studio 2010/Resharper/ASP.NET MVC
- 24. Pruebas unitarias IHttpModule
- 25. PHPUnit: ¿Cómo me burlo de este sistema de archivos?
- 26. ¿Cómo me burlo del operador de patillas integradas de Perl?
- 27. ¿Cómo implemento una página intersticial "cargando ..." en ASP.NET MVC?
- 28. Pruebas unitarias en CakePHP?
- 29. Pruebas unitarias ... cómo mejorarlo
- 30. Pruebas unitarias en C++
me gusta esto. Esto es mucho más fácil de entender que burlarse. ¿Alguna razón por la cual m_request y m_response son públicos? –
porque es un objeto falso diseñado para facilitar las pruebas. Hacerlos en privado significaría que si quería cambiarlos (y a veces podría) tendría que tener una propiedad, etc., etc. Algunas reglas, como la ocultación de la implementación, son activamente dañinas en este tipo de entorno. –
Me di cuenta de por qué es público justo después de que hice la pregunta. Ni Request ni Response no tienen setters, porque así es como está en HttpContextBase. Entonces, si necesito mutar la solicitud y la respuesta de mis pruebas unitarias, las necesito públicas. –