Asp.net-Mvc
如何在 ASP.NET MVC 中測試操作過濾器?
我只想模擬 ActionExecutedContext,傳遞它,讓過濾器工作一點並檢查結果。
有什麼幫助嗎?
您可以在此處
找到過濾器的來源 (它發生了一些變化,但目前還不是重點)。所以 - 我想要單元測試,RememberUrl 過濾器足夠聰明,可以在會話中保存目前 URL。
1)在ActionExecutedContext中模擬Request.Url:
var request = new Mock<HttpRequestBase>(); request.SetupGet(r => r.HttpMethod).Returns("GET"); request.SetupGet(r => r.Url).Returns(new Uri("http://somesite/action")); var httpContext = new Mock<HttpContextBase>(); httpContext.SetupGet(c => c.Request).Returns(request.Object); var actionExecutedContext = new Mock<ActionExecutedContext>(); actionExecutedContext.SetupGet(c => c.HttpContext).Returns(httpContext.Object);
- 假設您在 RememberUrlAttribute 的公共建構子中註入會話包裝器。
var rememberUrl = new RememberUrlAttribute(yourSessionWrapper); rememberUrl.OnActionExecuted(actionExecutedContext.Object); // Then check what is in your SessionWrapper