[TestMethod]
public void Home_Message_Display_Unknown_User_when_coockie_does_not_exist()
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
context
.Setup(c => c.Request)
.Returns(request.Object);
HomeController controller = new HomeController();
controller.HttpContext = context; //Here I am getting an error (read only).
...
}
我的基本控制器重写了初始化get的这个requestContext。我试着把这件事传下去,但我做得不对。
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
}
我在哪里可以获得更多关于使用Moq模拟我的RequestContext和HttpContext的信息?我正在尝试模拟cookie和一般的上下文。
发布于 2009-09-21 01:05:07
HttpContext是只读的,但它实际上派生自您可以设置的ControllerContext。
controller.ControllerContext = new ControllerContext( context.Object, new RouteData(), controller );
发布于 2009-09-21 14:30:50
创建一个请求和响应,并将它们都放入HttpContext:
HttpRequest httpRequest = new HttpRequest("", "http://mySomething/", "");
StringWriter stringWriter = new StringWriter();
HttpResponse httpResponse = new HttpResponse(stringWriter);
HttpContext httpContextMock = new HttpContext(httpRequest, httpResponse);
发布于 2015-06-30 20:02:55
感谢用户0100110010101。
它对我来说很有效,在这里我在为以下代码编写测试用例时遇到了问题:
var currentUrl = Request.Url.AbsoluteUri;
下面是解决这个问题的代码行
HomeController controller = new HomeController();
//Mock Request.Url.AbsoluteUri
HttpRequest httpRequest = new HttpRequest("", "http://mySomething", "");
StringWriter stringWriter = new StringWriter();
HttpResponse httpResponse = new HttpResponse(stringWriter);
HttpContext httpContextMock = new HttpContext(httpRequest, httpResponse);
controller.ControllerContext = new ControllerContext(new HttpContextWrapper(httpContextMock), new RouteData(), controller);
可能对其他人有帮助。
https://stackoverflow.com/questions/1452418
复制相似问题