如何使用Moq在ASP.NET MVC中模擬HttpContext?[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).
...
}我的基本控制器有一個重寫的Initialize,它得到了這個requestContext。我試圖通過這個,但我沒有做正確的事情。protected override void Initialize(System.Web.Routing.RequestContext requestContext){
base.Initialize(requestContext);}在哪里可以獲得有關(guān)使用Moq模擬我的RequestContext和HttpContext的更多信息?我正在嘗試模擬cookie和一般上下文。
3 回答

慕少森
TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個贊
HttpContext是只讀的,但它實(shí)際上是從您可以設(shè)置的ControllerContext派生的。
controller.ControllerContext = new ControllerContext( context.Object, new RouteData(), controller );

回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊
創(chuàng)建一個請求,響應(yīng)并將它們都放到HttpContext中:
HttpRequest httpRequest = new HttpRequest("", "http://mySomething/", "");
StringWriter stringWriter = new StringWriter();
HttpResponse httpResponse = new HttpResponse(stringWriter);
HttpContext httpContextMock = new HttpContext(httpRequest, httpResponse);

素胚勾勒不出你
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個贊
它對我有用,在這里我在為下面的代碼編寫測試用例時遇到了問題:
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);
可能對其他人有幫助。
- 3 回答
- 0 關(guān)注
- 807 瀏覽
添加回答
舉報
0/150
提交
取消